5

私はAntからMavenへのプロジェクトの移行に取り組んでいます。私が提供する必要のある最終的なディストリビューションは、実行可能なjarとそのすべての依存関係を含むzipです。これが私のpomの一部です:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.2-beta-4</version>
                <configuration>
                    <finalName>ProjectDistribution</finalName>
                    <appendAssemblyId>false</appendAssemblyId>              
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>                            
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>fullQualifiedNameToMainClass</mainClass>
                            <addClasspath>true</addClasspath>                               
                        </manifest>
                    </archive>
                    <descriptors>
                        <descriptor>${project.basedir}/src/main/assembly/dep.xml</descriptor>
                    </descriptors>                      
                </configuration>
                <executions>
                    <execution>
                        <id>jar-with-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>dist</id>
                        <phase>assembly</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>                        
                </executions>                                       
            </plugin>

そして、これがアセンブリファイルです。

<assembly>
<id>dist</id>
<formats>
    <format>zip</format>
</formats> 
<!-- 1st approach-->
<!--files>
    <file>
        <source>
            /target/ProjectDistribution.jar
        </source>
        <outputDirectory>/</outputDirectory>
    </file>
</files-->
<fileSets>
            <!-- 2nd approach-->        
    <!--fileSet>
        <directory>/target</directory>
        <outputDirectory></outputDirectory>
        <includes>      
            <include>*.jar</include>
        </includes>
    </fileSet-->
    <fileSet>
        <directory>/HelpFiles</directory>
        <outputDirectory></outputDirectory>
        <includes>
            <include>*.*</include>
        </includes>
    </fileSet>
</fileSets>

1.- mvn compile、2.- mvn package、および3.- mvn assembly:singleを実行します

私が扱っている問題はそれです

すべての依存関係を含むjarを生成し、zipを生成しますが、zipにjarは含まれません。アセンブリで最初にjarを生成し、作成されるまで(サイズが5 MBであるため)待ってから、zipを作成する方法を理解する必要があります。現在、アセンブリファイルからの1番目と2番目のアプローチはコメント化されていますが、私は両方を使用しましたが、どちらも機能していないようです。

どんな助けでも大歓迎です!

エリック

4

2 に答える 2

9

これを機能させるには、を分割<configuration>して2つのプラグイン実行に配置する必要があります。

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>2.2-beta-4</version>
      <executions>
        <execution>
          <id>jar-with-dependencies</id>
          <phase>verify</phase>
          <goals>
            <goal>single</goal>
          </goals>
          <configuration>
            <finalName>ProjectDistribution</finalName>
            <appendAssemblyId>false</appendAssemblyId>
            <descriptorRefs>
              <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
            <archive>
              <manifest>
                <mainClass>fullQualifiedNameToMainClass</mainClass>
                <addClasspath>true</addClasspath>
              </manifest>
            </archive>
          </configuration>
        </execution>
        <execution>
          <id>dist</id>
          <phase>verify</phase>
          <goals>
            <goal>single</goal>
          </goals>
          <configuration>
            <descriptors>
              <descriptor>${project.basedir}/src/main/assembly/dep.xml</descriptor>
            </descriptors>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

最初の実行でjarファイルが作成されます。2回目の実行では、そのJARファイルを取得し、他のファイルと一緒にZIPファイルに入れます。この構成では、アセンブリを実行mvn verifyまたは作成するだけです。mvn install

考慮すべき他の2つのことがあります:

  • jar-with-dependencies記述子にはプロジェクトアーティファクト自体が含まれているため、検証フェーズを使用してアセンブリをビルドする必要があります。パッケージ化フェーズ中、プロジェクト成果物はパッケージ化の準備ができていません
  • jar-with-dependencies記述子には、すべての依存関係を持つJARファイルを作成する機能が非常に制限されています。代わりにmaven-shade-pluginを使用する必要があります。
于 2012-07-17T19:48:13.583 に答える
1

事前定義さjar-with-dependenciesれたものとカスタムzip記述子を混合しています。通常は、両方ではなく、どちらか一方が必要です。

プロジェクトアーティファクトとその依存関係を含むzipが必要なようです。このために、を作成する必要はありませんjar-with-dependencies。ただし、すべての依存関係を含む単一の実行可能jarが必要な場合は、なぜ再度zipする必要があるのか​​が明確ではありません。

于 2012-07-17T17:39:10.570 に答える