我在我的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不算在内! 问题答案
我有一个包含多个子项目的根项目。最初,我们将这些项目作为独立的Maven项目保留,但我意识到Gradle更适合我使用。但是对于其中一个子项目,我们宁可不将其转换为Gradle项目,而将其保留为Maven项目。 root/build.gradle root/common.gradle root/api/pom.xml
问题内容: 我想利用Maven提供的功能来管理项目中的依赖项。我对Maven的工作方式的简要了解是,它将获取所需的JAR,然后使用这些库来构建项目。 目前,我已经设置了一个简单的POM文件作为测试: 为了管理依赖关系,我通常将项目或JAR添加到构建路径中,然后就可以构建我的项目了。 但是,当使用 M2Eclipse时 ,依赖关系不会自动添加到构建路径中。是否有任何配置可以让Eclipse知道Mav
问题内容: 我有一个独立的Java应用程序,我想将其打包为:myapp.jar。并将所有相关的jar文件复制到“备用文件夹”。理想情况下,我想让Maven更新META- INF文件,以将所有类路径依赖项jar条目添加到其中。 例如,如果我的项目引用了commons.jar,并且当我使用此插件构建程序集时,它将所有.class文件和程序包从commons.jar复制到myappjar- with-d