簡體   English   中英

用Maven重命名一個胖罐子

[英]Renaming a fat jar with Maven

當我創建一個jar文件時,我想要適應我的依賴項。 為此,我使用maven-assembly-plugin如下:

<build>
    ...
    <plugins>
        ...
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <finalName>${project.artifactId}-GUI</finalName>
                <archive>
                    <manifest>
                        <mainClass>gui.MyMainClass</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <!-- <appendAssemblyId>false</appendAssemblyId>-->
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
 </build>

這段代碼工作正常,它可以完成預期的工作。 但是,這會創建一個名為myjar-GUI-jar-with-dependencies.jar的新jar。 我想消除那個“jar-with-dependencies”的結局。 有誰知道怎么做?

我已經使用了你可以在我的代碼上看到的注釋行,但是這會產生以下警告:我不知道如何解決它:

[WARNING] Configuration options: 'appendAssemblyId' is set to false, and 'classifier' is missing.
Instead of attaching the assembly file: [myJar-GUI].jar, it will become the file for main project artifact.
NOTE: If multiple descriptors or descriptor-formats are provided for this project, the value of this file will be non-deterministic!
[WARNING] Replacing pre-existing project main-artifact file: [myJar].jar with assembly file: [myJar-GUI].jar

EDITED

在用戶Tunaki建議的解決方案之后,我使用了不同的插件和maven,因為我希望它能夠實現。 代碼如下:

            <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.2</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <transformers>
                    <transformer
                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>gui.SparkISGUI</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </plugin>

首先,您需要了解為什么會收到此警告。

Maven的慣例是,一個項目應建立一個單一的主神器。 對於包裝jar的項目,主要工件是maven-jar-plugin 此插件僅將JAR包含在項目中包含的類中。

一個項目最終可以生成其他工件,這些工件將通過其分類器與主工件區分開來:

除了主要工件之外,還可以附加到Maven項目的其他文件。 這種附加的字段可以由其分類器識別和訪問。

分類器是將附加到主工件名稱的標識符。

那么當你想創造一個超級罐時會發生什么? 不知何故,您的項目需要生成兩個罐子。 主要的是一個包含項目類的JAR,第二個是由maven-assembly-plugin生成的超級jar。 為了將該輔助附加工件與主工件區分開來,添加了分類器jar-with-dependencies

因此,當您刪除分類器時,您可以使用uber-jar有效地替換主工件。 在這種情況下, maven-assembly-plugin會發出警告,這就是你的警告。 您可以完全忽略它:它只是提醒您,您正在通過其他工件替換項目的主要工件。


除了maven-assembly-plugin ,請注意你還可以使用maven-shade-plugin生成一個超級jar:

這個插件提供了將工件打包在超級jar中的功能,包括它的依賴關系和陰影 - 即重命名 - 一些依賴項的包。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM