【问题标题】:mvn process-resources doesn't pull down uber jar created with shade pluginmvn process-resources 不会下拉使用 shade 插件创建的 uber jar
【发布时间】:2017-06-18 14:13:41
【问题描述】:

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

复制步骤:

  1. 使用下面的 pom 为“发布者”组件创建一个 pom.xml。
  2. 使用 Jenkins 构建来 mvn 部署它(mvn install 也可以)
  3. 为“consumer”添加对 pom.xml 的依赖(pom 下面)
  4. mvn 编译消费者

预期行为: 发布者的 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>

【问题讨论】:

  • 您在哪里指定发布商有分类器?您在消费者的依赖中使用&lt;classifier&gt;publisher&lt;/classifier&gt;
  • 啊,之前实验的残留物。我尝试了上面的 pom 和发布者: truepublisher consumer: publisher 在这两种情况下的行为相同。更新了消费者 pom 以删除分类器以实现内部一致性。
  • 好的。这里的“目标目录”是什么意思?我不确定我是否理解为什么应该在“消费者/目标目录的某个位置”下载发布者。
  • 也许我正在处理我的一个基本误解。我希望包含对消费者的依赖会自动将 jar 下载到某处。我脑海中的类比是有一个依赖项自动包含在 javac 命令的类路径中,并在进程资源阶段将其持久化到文件系统的某个位置。
  • 包含在类路径中,是的。它将被下载到您的本地存储库~/.m2/repository 下。但是进程资源阶段或目标文件夹在这里不起作用。 Maven 将在构建开始时下载依赖项。

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


【解决方案1】:

我在 cmets 中链接到的 answer from the possible duplicate 有一个指向无效示例页面的链接。这是给你的supplement。插件配置将属于消费者 pom 中。

执行:java

全名:

org.codehaus.mojo:exec-maven-plugin:1.5.0:java

说明: 在当前 VM 中执行提供的 java 类,并将封闭项目的依赖项作为类路径。

属性:

需要执行一个 Maven 项目。 需要范围内工件的依赖性解析:测试。 目标是线程安全的并支持并行构建。 自版本:1.0。

请特别参阅executableDependency 了解您的用例。看起来它将允许您根据其组 ID 和工件引用 producer,而不是硬编码路径。

【讨论】:

    猜你喜欢
    • 2014-08-28
    • 2012-06-13
    • 2019-04-30
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 2016-12-30
    • 2020-12-07
    • 1970-01-01
    相关资源
    最近更新 更多