目标:使用maven shade插件创建一个可执行的超级jar,可以在另一个pom的mvn编译期间执行。
Repro步骤:
预期行为 发布者的Uber jar被下载到消费者/目标目录中的某个地方
实际: Uber jar不会出现在消费者目录中
组件1:发布商
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mec.experiment</groupId>
<artifactId>publisher</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.6.Final</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestFile>src/main/resources/META-INF/MANIFEST.mf</manifestFile>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
组件2:消费者
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mec.experiment</groupId>
<artifactId>consumer</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.mec.experiment</groupId>
<artifactId>publisher</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
答案 0 :(得分:1)
我在评论中链接到的answer from the possible duplicate有一个指向死页示例页面的链接。这是supplement给你的。插件配置属于消费者pom。
EXEC:JAVA
全名:
org.codehaus.mojo:EXEC-行家-插件:1.5.0:JAVA
描述: 在当前VM中执行提供的java类,并将封闭项目的依赖项作为类路径。
属性:
需要执行Maven项目。 需要在范围内对工件进行依赖性解析:test。 目标是线程安全的,并支持并行构建。 自版本:1.0。
请参阅executableDependency
了解您的用例。看起来它允许您根据其组ID和工件引用producer
,而不是硬编码路径。