我一直在尝试使用Maven Shade插件来获取jar,但是我仍然没有成功。
这是我的项目结构:
MainModule -Module1 -src -pom.xml -Module2 -src -pom.xml -pom.xml
Module1(pom.xml):
<parent> <artifactId>MainModule</artifactId> <groupId>com.plugintest</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>Module1</artifactId>
Module2(pom.xml):
MainModule(pom.xml):
<groupId>com.plugintest</groupId> <artifactId>MainModule</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>Module1</module> <module>Module2</module> </modules> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.2</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
根据这段代码,我得到了2个jar文件(Module1-version.jar和Module2-version.jar)。但这不是我想要的。我希望得到1个jar文件(MainModule- version.jar),其中将包含另一个文件(Module1和Module2)。
为什么此Shade插件不起作用?
您MainModule不应该产生一个jar文件。它只能产生… pom文件。它包含所有子模块共享的配置。这就是为什么针对每个模块调用阴影插件的原因。
MainModule
而是,创建第三个模块。叫它FinalModule。此模块是的子级MainModule。将整个<build>节点从MainModulepom.xml移到FinalModulepom.xml。
FinalModule
<build>
文件结构:
主模块 -最终模块 -src -pom.xml -模块1 -src -pom.xml -模块2 -src -pom.xml -pom.xml
该FinalModule pom.xml如下所示:
pom.xml
FinalModule(pom.xml)
<parent> <groupId>com.plugintest</groupId> <artifactId>MainModule</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>FinalModule</artifactId> <dependencies> <dependency> <groupId>com.plugintest</groupId> <artifactId>Module1</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>com.plugintest</groupId> <artifactId>Module2</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.2</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
最后,您应该获得如下内容:
[INFO] [INFO] --- maven-jar-plugin:2.3.2:jar (default-jar) @ FinalModule --- [INFO] Building jar: D:\workspaces\java\Parent\FinalModule\target\FinalModule-1.0-SNAPSHOT.jar [INFO] [INFO] --- maven-shade-plugin:2.2:shade (default) @ FinalModule --- [INFO] Including my:Module1:jar:1.0-SNAPSHOT in the shaded jar. [INFO] Including my:Module2:jar:1.0-SNAPSHOT in the shaded jar. [INFO] Replacing original artifact with shaded artifact. [INFO] Replacing D:\workspaces\java\Parent\FinalModule\target\FinalModule-1.0-SNAPSHOT.jar with D:\workspaces\java\Parent\FinalModule\target\FinalModule-1.0-SNAPSHOT-shaded.jar [INFO] Dependency-reduced POM written at: D:\workspaces\java\Parent\FinalModule\dependency-reduced-pom.xml [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] [INFO] Parent ............................................ SUCCESS [0.016s] [INFO] Module1 ........................................... SUCCESS [1.654s] [INFO] Module2 ........................................... SUCCESS [0.343s] [INFO] FinalModule ....................................... SUCCESS [0.953s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------