1. ホーム
  2. java

[解決済み] Maven: assembly-pluginが全く実行されない

2022-02-25 02:11:26

質問

私はMavenの初心者です。以前、何度か学ぼうとしましたが、Mavenを使わない方が良いと思いました。今、(不運にも)私は貢献したいプロジェクトでMavenを使用する必要があります。この時点での私の問題は、パッケージングに関するものです。私は、すべての依存関係を含む自己完結型(別名quot;fat")jarを作成したいと思い、Mavenで遊んでいた同僚がpomファイルで私を助けました。

彼のpomファイルや、ここのSOのサンプルも確認しました。xmlは正当なものに見えますが、プラグインは全く実行されません。エラーはなく、"fatjar"が表示されない以外はすべてうまくいっています。この問題の原因は何でしょうか?

以下、pom.xmlの該当部分です。の位置に関して、矛盾するコードサンプルを見たことがあります。 <configuration><executions> タグを使い、あらゆるバリエーションを試しましたが、まだうまくいきません。

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>2.3</version>
  <executions>
    <execution>
        <id>make-jar-with-dependencies</id> <!-- this is used for inheritance merges -->
        <phase>package</phase> <!-- bind to the packaging phase -->
        <goals>
            <goal>single</goal>
        </goals>
    </execution>
  </executions>
  <configuration>
    <finalName>ProjectName</finalName>
    <appendAssemblyId>true</appendAssemblyId>
    <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
    <archive>
      <manifest>
        <mainClass>org.mydomain.ProjectName</mainClass>
        <addClasspath>true</addClasspath>
      </manifest>
    </archive>
  </configuration>
</plugin>

編集_1 からのコンソール出力は mvn clean package kkhmarbaise さんの質問通り

[INFO] 
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ myproject ---
[INFO] Deleting /home/user/workspace/project/target
[INFO] 
[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ myproject ---
[debug] execute contextualize
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 41 resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ myproject ---
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 292 source files to /home/user/workspace/project/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ myproject ---
[debug] execute contextualize
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /home/user/workspace/project/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ myproject ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.10:test (default-test) @ myproject ---
[INFO] No tests to run.
[INFO] Surefire report directory: /home/user/workspace/project/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO] 
[INFO] --- maven-jar-plugin:2.3.2:jar (default-jar) @ myproject ---
[INFO] Building jar: /home/user/workspace/project/target/myproject-2.0.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 12.210s
[INFO] Finished at: Thu Jun 07 11:45:14 CEST 2012
[INFO] Final Memory: 18M/184M
[INFO] ------------------------------------------------------------------------

解決方法は?

を使用してuberjarを作成することをお勧めします。 maven-shade-plugin というのも、その目的はまさにそれだからです。maven-assembly-pluginを使っても同様にできます。

そこで、あなたのpomを調べてみて、問題が分かりました。まず、pluginManagement ブロックで maven-assembly-plugin を定義しています。 NOT さらに、maven-assembly-plugin を別途依存関係として定義していますが、これは余計なことです。つまり、以下をpomから削除するだけです。

<dependency>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-assembly-plugin</artifactId>
   <version>2.3</version>
   <type>maven-plugin</type>
</dependency>

maven-assembler-pluginはこのように定義してください。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            ...all your configuration here..
        </plugin>
    </plugins>
</build>

さらに、リポジトリマネージャで処理されるはずのリポジトリ定義も多く見受けられます。pom内のリポジトリについては、以下の文書を読むことをお勧めします。 ソナタイプ情報 さらに、他の人がプロキシなどでプロジェクトを使用する場合、その人が動作させるためにあなたのpomを変更しなければならないか、あなたのpomに定義されたリポジトリに到達できないために使用できないことを考える必要があります。