我在我的java项目中使用maven-shade-plugin
。
我有一个名为core
的模块,我希望将它的所有依赖项打包到一个JAR中。我不想每次都创建fat big jar,并将其与应用程序代码一起部署。我的应用程序jar的大小<1 MB,但依赖性>20 MB
在我的服务器上,我将运行我的应用程序,如下所示:
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:创建阴影项目失败,项目主项目不存在
我不是maven或其插件的专家,因此非常感谢任何帮助:)
我自己还没有使用过shade插件,所以我不能提供任何实际的指导,但是看起来您需要一个多模块的maven项目:
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
my-project/pom.xml
可以是一个“多模块”聚合器:它应该具有
并具有以下功能:
<modules>
<module>app</module>
<module>core-lib</module>
</modules>
core-lib
模块将在其pom.xml
中包含shade/assembly插件的定义,该模块将负责创建“胖罐子”。在dependences
部分中,它将列出您必须“很少”更改的所有第三方依赖项/代码(在您的例子中,是带有20 mb工件的代码)。
如果需要,“app”模块可以依赖于“core-lib”模块,这样应用程序就可以访问库中的类。
所以您通常的工作流程是:
cd my-project/app
mvn package
cd my-project
mvn package
您可以在此处或此处阅读多个模块
根据JUnit新发布的V.5.2,现在有一个BOM: JUnit BOM:为了使用Maven或Gradle简化依赖性管理,现在在org.JUnit:jUnit-BOM:5.2.0 Maven坐标下提供了一个物料清单POM。 但是有了这个IntelliJ IDEA(v.2018.1.3Ultimate x64,Maven v.3.5.3,target JDK 10.0.1)似乎不知道标记是什么,也不
问题内容: 我已经在互联网上搜索了很长一段时间,但无法弄清楚如何配置Maven-war插件或类似的东西,以便系统依赖项包含在内置战争中(WEB-INF / lib文件夹) 在jar-build的情况下,我使用maven依赖插件: 但是我不明白在打仗的情况下该怎么办。我试过使用maven-war插件,但是在构建中不包括系统依赖项。 [更新] 我有以下类型的行为: 在我的POM中,构建战争时,这些依赖
问题内容: 我想在“常规” Maven 3构建(例如JAR或WAR打包)中使用来自远程Eclipse p2存储库的依赖项- 所有这些都无需将p2存储库转换为本地Maven存储库(这是osgi-to-maven2和m4e似乎可以)。 理想情况下,我只使用http://maven.eclipse.org/nexus/,但这还不包含很多捆绑软件。 使用Maven的systemPath不算在内! 问题答案
问题内容: 如何获取我拥有的jar文件并将其添加到Maven 2的依赖系统中?我将成为此依赖项的维护者,并且我的代码需要在类路径中使用此jar,以便对其进行编译。 问题答案: 您必须分两步执行此操作: 1.给您的JAR一个groupId,artifactId和版本,然后将其添加到您的存储库中。 如果您没有内部存储库,而只是试图将JAR添加到本地存储库,则可以使用任意groupId / artifa
我有一个使用Spring的项目。它使用的是3.1.1版本,但是,由于某些原因,我真的不知道,有些spring工件与两个不同的版本是重复的。我在项目中的所有pom.xml文件中查找这些依赖项。我还使用dependecy插件来找出那些依赖项包含在哪里。 这里有输出的提取 据我所知,这意味着包含在中。 更新:似乎当我评论下一段代码时,罐子不包括在战争中。
我有一个包含多个子项目的根项目。最初,我们将这些项目作为独立的Maven项目保留,但我意识到Gradle更适合我使用。但是对于其中一个子项目,我们宁可不将其转换为Gradle项目,而将其保留为Maven项目。 root/build.gradle root/common.gradle root/api/pom.xml