mvn process-resources没有拉下使用shade插件创建的超级jar

时间:2017-02-01 17:53:08

标签: java maven maven-3 executable-jar maven-shade-plugin

目标:使用maven shade插件创建一个可执行的超级jar,可以在另一个pom的mvn编译期间执行。

Repro步骤:

  1. 使用以下pom。
  2. 为“publisher”组件创建一个pom.xml
  3. 使用Jenkins构建来部署它(mvn install也能正常工作)
  4. 为“consumer”(pom below)
  5. 添加pom.xml的依赖项
  6. mvn编译消费者
  7. 预期行为 发布者的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>
    

1 个答案:

答案 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,而不是硬编码路径。