我有一个名为BigProject的项目。
结构为:
BigProject
-firstModule
--pom.xml
-secondModule
--pom.xml
-thirdModule
--pom.xml
-pom.xml
我想创建一个名为BigProject.jar的独特jar 目前,如果我进行全新安装,我将为每个模块返回一个jar。
您能解释一下该怎么做吗? 谢谢
答案 0 :(得分:0)
位于默认软件包中的每个 module-info.java
将被编译为 module-info.class
。
因此,一个JAR不能包含多个模块。
答案 1 :(得分:0)
那么您需要一个自定义的类加载器。值得庆幸的是,人们已经贡献了一些插件来减轻您的生活。您可以查看Ant的create jar任务或spring-boot的重新打包目标,无论您觉得方便如何。下面的示例:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.0.1.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
答案 2 :(得分:0)
如果要创建一个“超级罐”,它是一个包含(合并)来自模块及其依赖项(依赖于它们的jar)的所有类的jar,一种方法是使用Maven Shade插件。
向您的父pom添加另一个模块,例如。 “ uberjar”,并使其依赖于firstModule
,secondModule
,thirdModule
。将Shade插件的配置添加到该模块的pom.xml文件中;然后运行mvn package
会生成uber jar。
可以像下面的示例一样配置uberjar模块:
<project ...>
<parent>
<groupId>myproject</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>uberjar</artifactId>
<dependencies>
<dependency>
<groupId>myproject</groupId>
<artifactId>mod1</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>myproject</groupId>
<artifactId>mod2</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>myModule.MyMainClass</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>