0

基本的に、デフォルトのjarファイルに加えて、という名前のjarファイルを生成したい<project.name>.jar(私の場合は<project.name> + <project.version>.jar. 注意 : これ<project.name>.jarはデフォルトの jar と同じですが、名前は同じです。

そして、この追加のjarには、デフォルトで生成されたjarのマニフェストファイルである以下のようなマニフェストファイルが必要です

anifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: XXX
Start-Class: com.XXXX.XXX.Application
Spring-Boot-Version: 1.3.1.RELEASE
Created-By: Apache Maven
Build-Jdk: 1.8.0_74
Main-Class: org.springframework.boot.loader.JarLauncher

次のようにブロックを追加しています

          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <executions>
                 ....

                <execution>
                    <id>copy-jar</id>
                    <phase>package</phase>
                    <goals><goal>jar</goal></goals>
                    <configuration>
                        <finalName>${project.name}</finalName>
                    </configuration>
                </execution>
            <execution>
         </plugin>

しかし、私の場合、追加のjarで生成されたマニフェストファイルには、次のinpartフィールドがありません:

Start-Class
Main-Class 
...

そのため、展開できませんでした。要件が奇妙に聞こえることは知っていますが、問題は明らかです。デプロイ用の正しく完全なマニフェストファイルを持つjarをmavenに生成させる方法は?

//完全なプラグイン部分

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <executions>
                <execution>
                    <goals><goal>test-jar</goal></goals>
                </execution>
                <execution>
                    <id>copy-jar</id>
                    <phase>package</phase>
                    <goals><goal>jar</goal></goals>
                    <configuration>
                        <finalName>${project.artifactId}</finalName>
                    </configuration>
                </execution>
                <execution>
                    <id>dto-jar</id>
                    <goals><goal>jar</goal></goals>
                    <phase>package</phase>
                    <configuration>
                        <finalName>${project.artifactId}-dto</finalName>
                        <includes>
                            <include>**/dto/*</include>
                            <include>**/dto</include>
                            <include>**/exceptions/*</include>
                            <include>**/exceptions</include>
                            <include>**/utils/*</include>
                            <include>**/utils</include>
                        </includes>
                    </configuration>
                </execution>
            </executions>
        </plugin>
4

2 に答える 2

0

あなたのmaven-jar-pluginセクションに関して:

  • 3 つの実行があります: 1 つはtest-jar目標のため、2 つはjar目標のためです
  • default-jarそのうちの 1 つは、既定の実行 ID ( ) を再利用してfinalNameエントリを指定していますが、マニフェスト構成は指定していません。この構成によれば、マニフェストファイルも空である必要があり、質問によって提供される説明と一貫性がありません。
  • 追加のjar目標の実行には、カスタマイズされたオプションを使用した追加の構成があります。ここでは問題はありませんが、その一部として適切に入力されたマニフェスト ファイルを持っていることを除いて、(再び) 構成はありません。

考えられる説明は、pom もpluginManagementセクションを提供し、 の詳細な構成maven-jar-plugin、またはその上部にある親pom が同じための詳細な構成を指定することです。

これを再確認するには、次を実行できます

mvn help:effective-pom -Doutput=eff-pom.xml

生成されたファイルの内容を確認しeff-pom.xmlます。それがあなたのケースの唯一の真実の情報源になります。


マニフェスト エントリを見る:

 Spring-Boot-Version: 1.3.1.RELEASE   
 Main-Class: org.springframework.boot.loader.JarLauncher

通常、必要なマニフェスト ファイルを既に構成している Spring Boot 親 pom を持っているSpring Bootプロジェクトに取り組んでいることは明らかです。ただし、fat-jar (依存関係のある jar またはuber jarmaven-jar-plugin ) を使用し、 経由ではなく 経由でビルドされmaven-assembly-pluginます。

として:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <descriptors>
            <descriptor>src/main/assembly/jar-with-dependencies.xml</descriptor>
        </descriptors>
        <archive>
            <manifest>
                <mainClass>org.springframework.boot.loader.JarLauncher</mainClass>
            </manifest>
            <manifestEntries>
                <Start-Class>org.springframework.boot.load.it.jar.EmbeddedJarStarter</Start-Class>
            </manifestEntries>
        </archive>
    </configuration>
    <executions>
        <execution>
            <id>jar-with-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

したがって、Jar プラグイン ソリューションを見るのではなく、同じアセンブリ プラグインの実行をさらに追加する必要があります。

于 2016-04-27T15:43:01.417 に答える