在maven中只使用依赖项构建胖罐子



我的java项目中的use maven-shade-plugin

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

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

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

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

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

有两个maven插件用于构建fat-jar: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>

当我运行mvn -pl core shade:shade时,我得到错误:core: Failed to create shaded artifact, project main artifact does not exist

我认为这个选项:果心将从工件中排除我的来源。

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

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

我自己还没有使用过shade插件,所以我无法提供任何实用的指导,但似乎你需要一个多模块的maven项目:

  1. 重构项目(移动文件夹(如下所示:
my-project
|__app
|    |__src 
|    |  |__main( (and all the production sources/resources inside)
|    |  |__test (all the tests/test resources inside)
|    |__pom.xml
|__core-lib
|    |__pom.xml
|__  pom.xml

CCD_ 12可以是";"多模块";聚合器:它应该有<packaging>pom</packaging>,并具有以下内容:

<modules>
<module>app</module>
<module>core-lib</module>
</modules>

现在app模块可以成为编写应用程序代码的地方。它会经常更改,但不会产生任何胖jar——只有一个普通jar,其中只有来自该模块的编译代码(在您的示例中,它将是1mb工件(。

CCD_ 15模块将是在其CCD_;胖罐子";。在dependences部分中,它将列出您必须"很少"更改的所有第三方依赖项/代码(在您的案例中,是一个有20mb工件的依赖项(。

如果你需要;应用程序";模块可以依赖于";核心库";模块,以便应用程序可以访问库中的类。

所以你通常的工作流程是:

cd my-project/app
mvn package

如果您想同时构建应用程序库和核心库,那么:

cd my-project
mvn package

你可以在这里或这里阅读关于多模块

我需要在插件/配置下移动这个块

<artifactSet>
<excludes>
<exclude>core</exclude>
</excludes>
</artifactSet>

用于executions块。

现在我可以运行mvn -pl core shade:shade,并且只有依赖项的胖罐子:(

最新更新