【问题标题】:maven-jar-plugin addClasspath scopingmaven-jar-plugin addClasspath 作用域
【发布时间】:2011-03-28 20:43:06
【问题描述】:

在将类路径添加到 jar 清单时,是否可以让 maven-jar-plugin 使用范围?我有一个项目,我想在其中创建 2 个 jar - 运行时和测试。运行时 jar 应该有一个仅包含运行时依赖项的类路径。测试 jar 应该具有测试依赖项的类路径。我一直无法弄清楚如何做到这一点。有什么想法吗?

我知道MJAR-117,但这个错误已经存在一年多了——也许它已经在不同的 JIRA 中解决了?

【问题讨论】:

    标签: maven-2


    【解决方案1】:

    我认为 Maven 存档器不支持此功能(MJAR-117 似乎没有多大吸引力)。一种可能的解决方法是在构建 test-jar 时提供(硬编码的)附加类路径条目:

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>2.2</version>
      <executions>
        <execution>
          <id>default-jar</id>
          <configuration>
            <archive>
              <manifest>
                <addClasspath>true</addClasspath>
              </manifest>
            </archive>
          </configuration>
        </execution>
        <execution>
          <id>default-test-jar</id>
          <phase>package</phase>
          <goals>
            <goal>test-jar</goal>
          </goals>
          <configuration>
            <archive>
              <manifest>
                <addClasspath>true</addClasspath>
              </manifest>
              <manifestEntries>
                <Class-Path>foo-1.0.jar bar-2.1.jar</Class-Path>
              </manifestEntries>
            </archive>
          </configuration>
        </execution>
      </executions>
    </plugin>
    

    我同意这并不理想,您必须手动添加内容,这很容易出错。但它有效。

    您也许可以通过过滤和一些 antrun 或 groovy 魔法来做一些更动态的事情,但这肯定需要更多的工作。

    相关问题

    【讨论】:

      【解决方案2】:

      我不知道该错误是否已修复。坦率地说,我什至不知道这个错误是否存在。但我认为你的问题可以使用maven profiles来解决

      您可以有一个单独的配置文件用于您的测试:

      <profile>
        <id>test</id>
        <activation>
          <property>
            <name>test</name>
            <value>true</value>
          </property>
        </activation>
        <dependencies>
          <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8</version>
            <!-- 
              we don't need the test scope since we want the jar plugin to include
              it in classpath 
            -->
            <!-- scope>test</scope --> 
          </dependency>
        </dependencies>
      </profile>
      

      要使用此配置文件:

      $>mvn -Dtest=true package
      

      【讨论】:

        【解决方案3】:

        我想在一次 mvn 执行中创建应用程序 jar 和测试 jar。通过使用配置文件,我将不得不执行两次 mvn。我需要执行一次 mvn 的原因是因为我想使用 maven-assembly-plugin 将这两个 jar 打包到一个 zip 文件中。

        我进入了 maven archiver (here) 的源代码。看起来这是不可能的。我认为我能做到这一点的唯一方法是将我所有的测试依赖项的范围标记为“运行时”,并将这些 jar 部署到 PROD,即使它们不会被使用。不漂亮。

        196 if ( config.isAddClasspath() ) 197 { 198 StringBuffer类路径=新的StringBuffer(); 199
        200 列表工件 = project.getRuntimeClasspathElements();

        我刚刚有了另一个想法——这可以用 maven groovy 插件来完成吗?

        【讨论】:

          猜你喜欢
          • 2019-04-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-16
          • 2014-10-10
          • 2017-08-29
          • 2018-01-08
          相关资源
          最近更新 更多