web-dev-qa-db-ja.com

Mavenアセンブリプラグインを使用してJar-with-dependenciesとZipファイルを組み合わせる

JAR内のソースコードをすべての依存関係と組み合わせ、これを他のファイルと一緒にZipファイルにパッケージ化したいと思います。 Zipファイルだけでなくすべての依存関係を持つ1つのJarを作成することはできますが、2つを組み合わせることができません。

最終的には、Zipファイルに次のディレクトリ構造が必要です。

loader/bin/shellscript.sh

loader/lib/jar-with-dependencies.jar

loader/appname/config/config.xml

これが私のpomファイルからの抜粋です:

<plugins>
    <plugin>
        <artifactId>maven-Assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                       <mainClass>fully.qualified.MainClass</mainClass>
                    </manifest>
                 </archive>
                 <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                 </descriptorRefs>
                 <descriptors>
                    <descriptor>src/main/Assembly/assembly.xml</descriptor>
                 </descriptors>
              </configuration>
        </plugin>

これが私の議会からの抜粋です

<Assembly>
    <id>bin</id>
    <!-- Specifies that our binary distribution is a Zip package -->
    <formats>
        <format>Zip</format>
    </formats>

    <baseDirectory>SpreadsheetLoaderApp</baseDirectory>

    <fileSets>
        <fileSet>
            <directory>corporatebondpurchases</directory>
            <outputDirectory>${basedir}/corporatebondpurchases/config</outputDirectory>
            <includes>
                <include>*.xml</include>
                <include>*.properties</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>corporatebondpurchases</directory>
            <outputDirectory>${basedir}/bin</outputDirectory>
            <includes>
                <include>*.sh</include>
            </includes>
        </fileSet>
    </fileSets>
</Assembly>

ビルドの一部からの出力は次のとおりです。

[INFO] --- maven-Assembly-plugin:2.4:single (default-cli) @ SpreadsheetLoader ---
[INFO] Reading Assembly descriptor: src/main/Assembly/assembly.xml
[INFO] Building Zip: C:\Software\SpringSTS\workspace\SpreadsheetLoader\target\SpreadsheetLoader-0.0.1-SNAPSHOT-bin.Zip
[INFO] Building jar: C:\Software\SpringSTS\workspace\SpreadsheetLoader\target\SpreadsheetLoader-0.0.1-SNAPSHOT-jar-with-dependencies

これにより、ターゲットの下に1つのJarとZipファイルを作成できます(相対パスではなくフルパスを使用します)。私が欲しいのは、JarファイルをZipファイルの一部として含めることです。

編集:

さまざまなブログ投稿を調査した後、次のPOMファイルとアセンブリファイルを使用してこれを機能させることができました。

<build>
   <plugins>
       <plugin>
       <artifactId>maven-Assembly-plugin</artifactId>
       <executions>
           <execution>
               <id>jar-with-dependencies</id>
               <phase>package</phase>
               <goals>
                   <goal>single</goal>
               </goals>
               <configuration>
                   <descriptorRefs>
                       <descriptorRef>jar-with-dependencies</descriptorRef>
                   </descriptorRefs>
                   <archive>
                       <manifest>
                           <mainClass>fully.qualified.MainClass</mainClass>
                       </manifest>
                   </archive>
               </configuration>
           </execution>
           <execution>
               <id>dist</id>
               <phase>package</phase>
               <goals>
                   <goal>single</goal>
               </goals>
               <configuration>
                   <descriptors>
                       <descriptor>src/main/Assembly/assembly.xml</descriptor>
                   </descriptors>
               </configuration>
           </execution>
       </executions>
   </plugin>
  </plugins>
</build>

そして、対応するアセンブリファイル...

<Assembly>
    <id>dist</id>
    <!-- Specifies that our binary distribution is a Zip package -->
    <formats>
        <format>Zip</format>
    </formats>

    <includeBaseDirectory>true</includeBaseDirectory>
    <baseDirectory>SpreadsheetLoader</baseDirectory>

    <files>
        <file>
            <source>target/${project.artifactId}-${project.version}-jar-with-dependencies.jar</source>
            <outputDirectory>lib</outputDirectory>
        </file>
    </files>

    <fileSets>
        <fileSet>
            <directory>applicationbuild/${buildname}</directory>
            <outputDirectory>${buildname}/config</outputDirectory>
            <includes>
                <include>*.xml</include>
                <include>*.properties</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>applicationbuild/${buildname}</directory>
            <outputDirectory>bin</outputDirectory>
            <includes>
                <include>*.sh</include>
            </includes>
            <lineEnding>unix</lineEnding>
            <fileMode>0755</fileMode>
        </fileSet>
        <fileSet>
            <directory>./</directory>
            <outputDirectory>logs</outputDirectory>
            <excludes>
                <exclude>*/**</exclude>
            </excludes>
        </fileSet>
        <fileSet>
            <directory>./</directory>
            <outputDirectory>${buildname}/sourcedata</outputDirectory>
            <excludes>
                <exclude>*/**</exclude>
            </excludes>
        </fileSet>
    </fileSets>
</Assembly>

これにより、展開用のシンプルなディレクトリ構造が得られます。私の主な情報源は次のサイトから来ました:

http://www.drawbackz.com/stack/175442/maven-Assembly-plugin-how-to-create-nested-assemblies.html

ありがとう

19
user3676476

上記の結果には十分満足しています。ただし、これはMavenを使用する最初の試みです。誰かがこれを行うためのより良い方法を持っているなら、私は喜んでアドバイスをします。

5
user3676476