【问题标题】:maven how to install a jar with a classifier and not install the default onemaven如何安装一个带有分类器的jar而不安装默认的
【发布时间】:2012-04-02 08:50:35
【问题描述】:

我有一个这样的 pom。我要做的就是将文件安装为 llews-1.0-test.jar 而不是 llews-1.0.jar。虽然这个 pom 将一个 jar 安装为 llews-1.0-test.jar,但它还安装了 llews-1.0.jar(默认)一个。如何禁用默认安装?

<build>
            <finalName>llews-${project.version}-test</finalName>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.3.1</version>
                    <executions>                        
                        <execution>
                            <id>install test</id>
                            <phase>install</phase>
                            <goals>
                                <goal>install-file</goal>
                            </goals>

                            <configuration>
                                <file>${project.build.directory}\${project.build.finalName}.jar</file>
                                <pomFile>${basedir}\pom.xml</pomFile>
                                <classifier>test</classifier>
                            </configuration>
                        </execution>
                    </executions>                   
                </plugin>
</build>

【问题讨论】:

  • 我的问题是你为什么要这样做?我想不出一个合理的用例..
  • 因为我正在构建一个在测试环境中使用的测试jar,所以我使用这个名字所以人们不会用错
  • 所以只用一个测试来命名 artifactId 而不是使用分类器。这将是更好、更简洁的方法,使用它的人在依赖它时不必使用分类器。您正在用不适合的东西重载分类器,因此使事情变得比必要的更困难。
  • 那么是分类器的用途是什么? maven.apache.org/guides/mini/…

标签: maven


【解决方案1】:

最好的办法可能是替换默认的jar插件执行,像这样

  <plugin>
    <artifactId>maven-jar-plugin</artifactId>
    <executions>
      <execution>
        <id>default-jar</id>
        <configuration>
          <classifier>test</classifier>
        </configuration>
      </execution>
    </executions>
  </plugin>

这样,您的默认工件将只有所需的分类器,并且安装 和 部署都会默认执行正确的操作。

当然你不应该额外修改finalName,因为jar插件会添加分类器。

注意:虽然这回答了给定的问题,但我同意 Manfred Moser 的观点,即你想做的事情看起来不是一个好主意。

【讨论】:

  • 基本上,在这个项目中,我有 2 个配置文件,1 个用于测试,1 个用于生产。当我使用测试配置文件时,我想安装 llews-1.0-test.jar。用于 llews-1.0-prod.jar 的生产配置文件,但找不到执行此操作的好方法。
  • @Nan - 如果您的工件非常相似,以至于您觉得配置文件比单独的模块更适合,并且如果您真的想将这两个变体安装到存储库中,那么分类器可能是要走的路.
  • 就我而言,我想构建一个常规库 jar 并以通常的方式将其提供给其他项目。但是,我也想发布 jar 的可运行版本。我可以使用构建目标进行构建(install 用于常规,spring-boot:repackage 用于创建可运行的 jar)。如何deploy每一个?为单个“主”类创建整个项目,似乎很愚蠢......
【解决方案2】:

您不应该使用分类器来表示它是一个测试工件。而不是所有的 finalName hack 和 jar 插件重新配置只需将 artifactId 更改为 leews-test。

这样一来,从名称上看它是一个测试工件,它的依赖项可以在不需要分类器的情况下使用它,并且一切都可以开箱即用。

【讨论】:

  • 但是在这种情况下,当我使用另一个配置文件构建生产 jar 时,我如何在配置文件中更改此名称?
  • 哦......好吧......它不是一个测试工件,因为它包含测试,但它是为 QA​​/测试环境配置的?如果是这种情况,您可以使用您所做的方法.. 或为每个模块使用单独的模块。
  • 正确。让我稍微澄清一下。我们有测试环境和生产环境。不同的罐子用于不同的设置。为避免误用,我想为它们起不同的名字。所以我使用分类器来区分它们。但是如果我想用所有测试用例构建一个 jar,我该怎么办?还是分类器?
猜你喜欢
  • 1970-01-01
  • 2016-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 2022-11-06
  • 2016-01-09
  • 1970-01-01
相关资源
最近更新 更多