আমি মাভেনের pom.xML থেকে শেল কমান্ডগুলি কার্যকর করতে চাই


105

আমি মাভেনের সাথে লিনাক্স শেল কমান্ডগুলি কার্যকর করতে চাই। এখানে আমি চেষ্টা করেছি:

<plugin>  
  <groupId>org.codehaus.mojo</groupId> 
  <artifactId>exec-maven-plugin</artifactId> 
  <version>1.1.1</version> 
  <executions>
    <execution>
      <goals>
        <goal>exec</goal> 
      </goals>
    </execution>
  </executions>
  <configuration>
    <executable>hostname</executable> 
  </configuration>
</plugin>

আপনার প্রশ্নটি পরিষ্কার করুন এবং আপনার প্রশ্নের pom.xML ফর্ম্যাট করুন। এটি পাঠযোগ্য নয়।
zengr

12
আমি অভদ্র হতে চাই না তবে আপনাকে কীভাবে প্রশ্ন জিজ্ঞাসা করতে হবে তা শিখতে হবে, আমরা মানসিক নই। আপনি কি করেছিলেন? তুমি কি পেলে? প্রত্যাশিত ফলাফল কি?
পাস্কেল থিভেন্ট

উত্তর:


148

আমার জন্য যা কাজ করছে তা এখানে:

<plugin>
  <artifactId>exec-maven-plugin</artifactId>
  <groupId>org.codehaus.mojo</groupId>
  <executions>
    <execution><!-- Run our version calculation script -->
      <id>Version Calculation</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>exec</goal>
      </goals>
      <configuration>
        <executable>${basedir}/scripts/calculate-version.sh</executable>
      </configuration>
    </execution>
  </executions>
</plugin>


11
আমি যুক্ত করতে চাই যে এটি প্লাগইনের 1.5 নং সংস্করণ (কমপক্ষে) সাথে কাজ করে না, যেহেতু <configuration />এটি অনুসরণ করা উচিত <executions />এবং এতে স্থাপন করা উচিত নয়। এই সাধারণ সিনট্যাকটিকাল ভুলটি খুঁজে পেতে আমাকে বেশ খানিকটা সময় নিয়েছে। মাভেনের ত্রুটির আউটপুট সত্যই সহায়ক নয়।
joergl

1
স্থাপনার পর্যায়ে স্ক্রিপ্টটি চালাতে চাইলে আমাদের কোন ধাপ বা লক্ষ্যটি সরবরাহ করতে হবে ??
লুসি


2
<workingDirectory>${basedir}/scripts/</workingDirectory>সম্পূর্ণ পথ দেওয়ার পরিবর্তে কনফিগারেশন ব্লকে ব্যবহার <executable>করাও ভাল ধারণা হতে পারে
akn

35

এখানে সমস্যাটি হ'ল আমি জানি না কী প্রত্যাশা করা হয় । আপনার বর্তমান সেটআপের সাথে, কমান্ড লাইনে প্লাগইনটি চাওয়া কেবল কাজ করবে:

v mvn exec: exec
[তথ্য] প্রকল্পগুলির জন্য স্ক্যান করা হচ্ছে ...
[তথ্য] ------------------------------------------------------ -------------------------
[তথ্য] বিল্ডিং Q3491937
[তথ্য] টাস্ক-বিভাগ: [সম্পাদনা: সম্পাদনা]
[তথ্য] ------------------------------------------------------ -------------------------
[তথ্য] [এক্সিকিউট: এক্সিকিউট {এক্সিকিউশন: ডিফল্ট-ক্লিপ}]
[তথ্য] ল্যাপটপ
[তথ্য] ------------------------------------------------------ -------------------------
[তথ্য] বিল্ড সাফল্য
[তথ্য] ------------------------------------------------------ -------------------------
...

গ্লোবাল configurationব্যবহৃত হয়, hostnameকমান্ড কার্যকর করা হয় ( laptopআমার হোস্ট-নেম)। অন্য কথায়, প্লাগইন প্রত্যাশার মতো কাজ করে।

এখন, আপনি যদি বিল্ডের অংশ হিসাবে একটি প্লাগইন সম্পাদন করতে চান তবে আপনাকে একটি নির্দিষ্ট পর্যায়ে একটি লক্ষ্য আবদ্ধ করতে হবে । উদাহরণস্বরূপ, এটি এটিকে বাঁধতে compile:

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.1.1</version>
    <executions>
      <execution>
        <id>some-execution</id>
        <phase>compile</phase>
        <goals>
          <goal>exec</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <executable>hostname</executable>
    </configuration>
  </plugin>

এবং তারপর:

v এমভিএন সংকলন
[তথ্য] প্রকল্পগুলির জন্য স্ক্যান করা হচ্ছে ...
[তথ্য] ------------------------------------------------------ -------------------------
[তথ্য] বিল্ডিং Q3491937
[তথ্য] টাস্ক-বিভাগ: [সংকলন]
[তথ্য] ------------------------------------------------------ -------------------------
[তথ্য] [সংস্থানসমূহ: সংস্থানসমূহ {সম্পাদনা: ডিফল্ট-সংস্থানসমূহ]
[INFO] ফিল্টার করা সংস্থান অনুলিপি করতে 'UTF-8' এনকোডিং ব্যবহার করা।
[আইএনএফও] বিদ্যমান অস্থানীয় সংস্থান এড়িয়ে যান ডিরেক্টরি / হোম / পাস্কেল / প্রকল্পগুলি / কিউ 3491937 / এসসিআর / প্রধান / সংস্থানসমূহ
[তথ্য] [সংকলক: সংকলন {কার্যকর: ডিফল্ট-সংকলন}]
[তথ্য] সংকলনের জন্য কিছুই নেই - সমস্ত ক্লাস আপ টু ডেট
[তথ্য] [এক্সিকিউট: এক্সিকিউট {এক্সিকিউশন: কিছু-কার্যকর execution]
[তথ্য] ল্যাপটপ
[তথ্য] ------------------------------------------------------ -------------------------
[তথ্য] বিল্ড সাফল্য
[তথ্য] ------------------------------------------------------ -------------------------
...

নোট করুন যে আপনি একটি configurationভিতরে একটি নির্দিষ্ট করতে পারেন execution


[ত্রুটি] বিল্ড ত্রুটি [তথ্য] ------------------------------------------ ------------------------------ [INFO] এক বা একাধিক প্রয়োজনীয় প্লাগইন প্যারামিটারগুলি 'এক্সিকিউটিভ: এক্সিকিউটিভ' এর জন্য অবৈধ / অনুপস্থিত [ 0] প্লাগইন 'এক্সিকিউটিভ-মভেন-প্লাগইন'-এর সংজ্ঞাটির অভ্যন্তরে নিম্নলিখিতটি নির্দিষ্ট করুন: <কনফিগারেশন> ... <এক্সিকিউটেবল> ভ্যালু </ এক্সিকিউটেবল> </ কনফিগারেশন> -অর- কমান্ড লাইনে, উল্লেখ করুন:' -ডেক্সেক। এক্সিকিউটেবল = ভ্যালু 'আমি এখন এই ত্রুটি পেয়েছি।
নরেশকুমার

2
@ gnash-85: আপনি এখনও কি করছেন সে সম্পর্কে আমার এখনও ধারণা নেই। আপনি যে সঠিক স্নিপেট সরবরাহ করেছিলেন তা আমি ব্যবহার করেছি এবং উপরে দেখানো মত কোনও সমস্যা নেই। আপনি কীভাবে মাভেনকে ডাকেন (এবং আপনি যদি কিছু পরিবর্তন করেন তবে আপনার বর্তমান কনফিগারেশনটি কী) তা দেখানোর জন্য দয়া করে আপনার প্রশ্নটি আপডেট করুন।
পাস্কাল থিভেন্ট

আমি একই কোডটি একটি শিশু মডিউলে রেখেছি। এবং আমি mvn exec: প্যারেন্ট pom.xML থেকে এক্সিকিউট করার চেষ্টা করছি। এবং আমি এই ত্রুটি পেয়েছি। কিন্তু যখন আমি স্বতন্ত্রভাবে এটি কার্যকর করি এটি কাজ করে।
নরেশকুমার

5
@ গ্ন্যাশ -৫৫: এটি সাধারণ। আপনি যখন mvn exec:execপিতামাতাকে ডাকেন, এমভিএন এটি প্যারেন্ট সহ মাল্টি-মডিউল বিল্ডের সমস্ত প্রকল্পে চালাবে। তবে প্যারেন্ট পমতে প্লাগইনটির জন্য কোনও কনফিগারেশন নেই যা প্রত্যাশিত executableহিসাবে সংজ্ঞায়িত হয়, সুতরাং ত্রুটি বার্তা।
পাস্কাল থিভেন্ট

2
এই আলোচনায় যুক্ত হচ্ছে। আপনি যদি ব্লকের configurationভিতরে নির্দিষ্ট করে থাকেন তবে executionএটি একটি গোষ্ঠীর ( mvn install) অংশ হিসাবে চালিত হলে কাজ করবে তবে specify the following: <configuration>সরাসরি চালানো হলে ত্রুটিটি ছুঁড়ে দেবে mvn exec:exec
roo2

19

সমাধান। সমস্যাটি হল, এক্সিকিউটেবল লিনাক্সে অন্যভাবে কাজ করছে। আপনি .sh ফাইল চালাতে চাইলে আপনার নীচের মত করে লেখা উচিত। এটি pom.xML এ লিখুন

    <plugin>
        <artifactId>exec-maven-plugin</artifactId>
    <version>1.6.0</version>
        <groupId>org.codehaus.mojo</groupId>
        <executions>
            <execution><!-- Run our version calculation script -->
                <id>Renaming build artifacts</id>
                <phase>package</phase>
                <goals>
                    <goal>exec</goal>
                </goals>
                <configuration>
                    <executable>bash</executable>
            <commandlineArgs>handleResultJars.sh</commandlineArgs>
                </configuration>
            </execution>
        </executions>
    </plugin>

2
ধন্যবাদ! আমার কাছে উইন্ডোজ ব্যবহারকারী হিসাবে যিনি শেল স্ক্রিপ্ট পছন্দ করেন, সেটিই মূল কী!
রুইক

6

2 বিকল্প:

  1. আপনি কোনও পর্যায়ে আবদ্ধ না হয়ে ম্যাভেন থেকে একটি কমান্ড চালাতে চান, আপনি কেবল কমান্ডটি টাইপ করুন এবং ম্যাভেন এটি চালান , আপনি কেবল কিছু চালানোর জন্য ম্যভেন করতে চান, আমরা সংকলন / প্যাকেজ / এ থাকি তা আপনার যত্ন নেই ... চলুন বলুন আমি npm startমাভেনের সাথে চালাতে চাই , আপনি নীচের সাথে এটি অর্জন করতে পারেন:

mvn exec:exec -Pstart-node

তার জন্য আপনার নীচের মেভেন বিভাগের প্রয়োজন

  <profiles>
    <profile>
      <id>start-node</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.3.2</version>
            <executions>
              <execution>
                <goals>
                  <goal>exec</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <executable>npm</executable>
              <arguments><argument>start</argument></arguments>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>

  </profiles>
  1. আপনি নির্দিষ্ট পর্যায়ে থাকাকালীন আপনি ম্যাভেন থেকে একটি স্বেচ্ছাসেবক কমান্ড চালাতে চান , উদাহরণস্বরূপ যখন আমি ইনস্টল পর্যায়ে থাকি তখন আমি চালাতে চাই আপনি npm installএটি দিয়ে এটি করতে পারেন:

mvn install

এবং এটি কাজ করার জন্য আপনার নীচের বিভাগটি প্রয়োজন:

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.3.2</version>
    <executions>

      <execution>
        <id>npm install (initialize)</id>
        <goals>
          <goal>exec</goal>
        </goals>
        <phase>initialize</phase>
        <configuration>
          <executable>npm</executable>
          <arguments>
            <argument>install</argument>
          </arguments>
        </configuration>
      </execution>

1

ধন্যবাদ! টমর বেন ডেভিড। এটা আমাকে সাহায্য করেছে। আমি যেমন ডেমো ফোল্ডারে পাইপ ইনস্টল করছি আপনি এনপিএম ইনস্টলের উল্লেখ করেছেন

<groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.3.2</version>
            <executions>
              <execution>
                <goals>
                  <goal>exec</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <executable>pip</executable>
              <arguments><argument>install</argument></arguments>                            
             <workingDirectory>${project.build.directory}/Demo</workingDirectory>
            </configuration>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.