Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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
Java 在maven中仅使用依赖项构建胖jar_Java_Maven_Maven Shade Plugin - Fatal编程技术网

Java 在maven中仅使用依赖项构建胖jar

Java 在maven中仅使用依赖项构建胖jar,java,maven,maven-shade-plugin,Java,Maven,Maven Shade Plugin,我在java项目中使用maven shade插件 我有一个名为core的模块,我想将其所有依赖项打包到一个jar中。我不想每次都创建一个又大又胖的jar,并将其与我的应用程序代码一起部署。我的应用程序jar的大小20 MB 在我的服务器上,我会像这样运行我的应用程序: java-cp core.lib.jar:core.jar myApp 当我更改应用程序代码时,我只需要将core.jar部署到我的服务器上,当我更改依赖项时,我只需要上传core.lib.jar(这非常罕见) 关于如何使用jav

我在java项目中使用maven shade插件

我有一个名为
core
的模块,我想将其所有依赖项打包到一个jar中。我不想每次都创建一个又大又胖的jar,并将其与我的应用程序代码一起部署。我的应用程序jar的大小<1 MB,但依赖项>20 MB

在我的服务器上,我会像这样运行我的应用程序:

java-cp core.lib.jar:core.jar myApp

当我更改应用程序代码时,我只需要将
core.jar
部署到我的服务器上,当我更改依赖项时,我只需要上传
core.lib.jar
(这非常罕见)

关于如何使用java源代码构建胖jar,有很多文档,但我想将它们排除在外,并独立地将其交付给服务器

有两个maven插件用于构建胖罐子:assembly和shade。我想坚持用阴影

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.3</version>
            <executions>
                <execution>
                    <phase>none</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <artifactSet>
                            <excludes>
                                <exclude>core</exclude>
                            </excludes>
                        </artifactSet>
                    </configuration>
                </execution>
            </executions>
        </plugin>

org.apache.maven.plugins
maven阴影插件
3.2.3
没有一个
阴凉处
核心
当我运行
mvn-pl core shade:shade
时,我得到错误:
core:未能创建着色工件,项目主工件不存在

我认为这个选择: 核心 将从工件中排除我的来源

我将
phase
设置为
none
,因为我不想在运行
package
时创建胖jar。 我想运行
mvn shade:shade
并更新了fat-jar


我不是maven或其插件方面的专家,因此非常感谢您的帮助:)

我自己没有使用shade插件,因此无法提供任何实际指导,但您似乎需要一个多模块maven项目:

  • 重构项目(移动文件夹)使其看起来像这样:
  • my project/pom.xml
    可以是一个“多模块”聚合器:它应该具有
    pom
    并具有以下功能:

    <modules>
      <module>app</module>
      <module>core-lib</module>
    </modules>
    
    如果要同时构建应用程序库和核心库,请执行以下操作:

    cd my-project
    mvn package
    

    您可以阅读有关多模块的信息,或者我需要在插件/配置下移动此块

                    <artifactSet>
                        <excludes>
                            <exclude>core</exclude>
                        </excludes>
                    </artifactSet>
    
    
    核心
    
    用于
    执行
    块中


    现在我可以运行
    mvn-pl-core-shade:shade
    ,并拥有仅具有依赖项的胖jar:)

    Maven中所有类型项目的布局都是生产代码的
    src/main/java
    <代码>src/test/java用于测试代码。。。遵守惯例。您的建议违反了应避免的配置范式惯例。@khmarbaise:是的,当然,这是一个打字错误-我已经修复了答案,谢谢您指出这一点。话虽如此,我想强调(主要是针对问过这个问题的Alexander)答案的主要“要点”是建议使用maven的多模块功能。感谢@MarkBramnik的建议!我已经使用了maven多模块特性。我已经有了一些模块,比如:core、app、server等等。我希望避免仅仅为了打包目的而创建模块,并且不要创建app-lib、server-lib、core-lib。通过使用maven汇编插件,您可以打包一个只包含依赖项的jar/zip和另一个包含应用程序代码的jar。
    cd my-project
    mvn package
    
                    <artifactSet>
                        <excludes>
                            <exclude>core</exclude>
                        </excludes>
                    </artifactSet>