Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用maven构建胖罐子_Maven_Jar_Maven Assembly Plugin - Fatal编程技术网

使用maven构建胖罐子

使用maven构建胖罐子,maven,jar,maven-assembly-plugin,Maven,Jar,Maven Assembly Plugin,我有一个代码库,我想作为jar分发。它还依赖于外部jar,我想将其打包到最终的jar中 我听说这可以通过使用maven汇编插件来完成,但我不明白怎么做。有人能给我举几个例子吗 现在,我正在使用fat-jar打包最后一个jar。我想使用maven实现同样的目标。您可以使用 在构建中配置shade插件后,命令mvn package将创建一个jar,并将所有依赖项合并到其中 注意:如果您是spring boot应用程序,请阅读答案的末尾 将以下插件添加到您的pom.xml 最新版本可以是 。。。 or

我有一个代码库,我想作为jar分发。它还依赖于外部jar,我想将其打包到最终的jar中

我听说这可以通过使用
maven汇编插件来完成,但我不明白怎么做。有人能给我举几个例子吗

现在,我正在使用fat-jar打包最后一个jar。我想使用maven实现同样的目标。

您可以使用


在构建中配置shade插件后,命令
mvn package
将创建一个jar,并将所有依赖项合并到其中

注意:如果您是spring boot应用程序,请阅读答案的末尾

将以下插件添加到您的
pom.xml
最新版本可以是

。。。
org.apache.maven.plugins
maven汇编插件
在此处选择最新版本
带有依赖项的jar
集合所有
包裹
单一的
...
配置此插件后,运行
mvn包
将生成两个jar:一个只包含项目类,另一个包含所有依赖项的胖jar,后缀为“-jar with dependencies”

如果您想在运行时正确设置
classpath
,那么还需要添加以下插件


org.apache.maven.plugins
maven jar插件
真的
完全合格

对于spring启动应用程序只使用以下插件(选择合适的版本)


org.springframework.boot
springbootmaven插件
真的
${start class}
重新包装
您可以使用用于包装的。基本上,它将您的项目及其依赖项组装为一个jar,不仅包括您的项目jar文件,还包括所有外部依赖项作为“jar的jar”,例如


com.joira
. 


注2:出于这样或那样的原因,onejar maven插件项目没有在maven Central发布。但是,跟踪原始项目并使用groupId
com.joira
将其发布到

也许您想要
maven shade plugin
,绑定依赖项,最小化未使用的代码并隐藏外部依赖项以避免冲突

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.1.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <minimizeJar>true</minimizeJar>
                        <createDependencyReducedPom>true</createDependencyReducedPom>
                        <dependencyReducedPomLocation>
                            ${java.io.tmpdir}/dependency-reduced-pom.xml
                        </dependencyReducedPomLocation>
                        <relocations>
                            <relocation>
                                <pattern>com.acme.coyote</pattern>
                                <shadedPattern>hidden.coyote</shadedPattern>
                            </relocation>
                        </relocations>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

org.apache.maven.plugins

  • 实际上,添加

    <archive>
       <manifest>
        <addClasspath>true</addClasspath>
        <packageName>com.some.pkg</packageName>                     
        <mainClass>com.MainClass</mainClass>
      </manifest>
    </archive>
    
    
    真的
    com.some.pkg
    com.main类
    
    对maven jar插件的声明不会为我将主类条目添加到清单文件中。
    我不得不将它添加到maven assembly插件中,以便在清单中获得它。另一种选择是使用maven插件构建一个
    uber jar

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version> Your Version Here </version>
        <configuration>
                <!-- put your configurations here -->
        </configuration>
        <executions>
                <execution>
                        <phase>package</phase>
                        <goals>
                                <goal>shade</goal>
                        </goals>
                </execution>
        </executions>
    </plugin>
    
    
    org.apache.maven.plugins
    maven阴影插件
    你的版本在这里
    包裹
    阴凉处
    
    是否可以选择要打包的依赖项?例如,如果a.jar和b.jar是外部jar,而我只想将a.jar打包到最终jar中,这是可能的/可配置的吗?我还看到最终jar中捆绑了一个jar。这增加了最终罐子的大小很多。是否可以选择要包含在最终jar中的外部jar?下面是一个jar日志:我不知道您是否可以配置所包含的内容。基本上,一个jar包含项目指定的所有依赖项,包括可传递依赖项,因此,如果您有很多依赖项,那么最终的jar可能会变大。一个jar会增加一些开销,以便让Java使用“jar中的jar”结构。该插件的当前版本现在是2.4。该插件现已弃用,应改用maven shade插件。请参阅@phlogratos-answer:。maven程序集插件可以最小化胖罐子的大小吗?@Richard您认为它在哪里被弃用了?我在这里找不到任何东西@user3833308“deprecated”可能是一个错误的词,但是网站上的文档说“如果你的项目想要将你的工件打包到uber jar中,那么汇编插件只提供基本的支持。要获得更多的控制,请使用Maven Shade插件。”这是正确的方法。maven assembly plugin文档说明:“如果您的项目希望将您的工件打包到uber jar中,那么assembly plugin只提供基本支持。要获得更多控制,请使用maven Shade插件。”但是我如何使用单个.jar并将其用于发布?非常感谢!工作得很有魅力!如果遇到
    Provider org.apache.xerces.jaxp.SAXParserFactoryImpl未找到
    ,只需删除
    true
    。如果出现“java.lang.SecurityException:清单主属性的签名文件摘要无效”异常,则上述配置部分中的此项添加将有助于:
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version> Your Version Here </version>
        <configuration>
                <!-- put your configurations here -->
        </configuration>
        <executions>
                <execution>
                        <phase>package</phase>
                        <goals>
                                <goal>shade</goal>
                        </goals>
                </execution>
        </executions>
    </plugin>