java - Maven 安装不考虑命令行参数

标签 java maven command-line-arguments pom.xml

我有一个项目,我正尝试使用 maven 安装它。 pom.xml 中有一些属性会在运行 maven install 命令时根据我们尝试构建的库版本进行修改:

<properties>
  <some-version>0</some-version>
</properties>

这里的零是一个占位符,因为我们总是会在构建过程中指定一个合法版本。然后稍后在 pom.xml 中引用该版本以指定一些依赖项:

  <dependencies>
    <dependency>
      <groupId>com.mycompany.myproduct</groupId>
      <artifactId>someOtherProject</artifactId>
      <version>${some-version}</version>
    </dependency>
  </dependencies

使用以下命令行通过 make 完成构建:

mvn -Dsome-version=1.6.2

Maven 能够正确解析版本并按预期构建。但是,在我的本地 Maven 存储库 (/home/user/.m2) 中安装的版本没有正确的版本。安装的pom.xml没有我在命令行设置的更新版本:

user@ubuntu:~/$ cat /home/user/.m2/repository/com/mycompany/myproduct/myproject/1.0.0/myproject-1.0.0.pom | grep some-version -C 1

  <properties>
    <some-version>0</some-version>
  </properties>
--
      <artifactId>someOtherProject</artifactId>
      <version>${some-version}</version>
    </dependency>
user@ubuntu:~/$ 

这会阻止依赖于 myproject 的任何其他项目能够构建,因为 maven 会提示它找不到 someOtherProject 的版本 0:

[ERROR] Failed to execute goal on project myproject: 
Could not resolve dependencies for project mycompany.myproduct:myproject:jar:1.0.0: 
The following artifacts could not be resolved: com.mycompany.myproduct:someOtherProject:jar:0, 
Could not find artifact com.mycompany.myproduct:someOtherProject:jar:0 in central (https://mycompany.com/artifactory/repo/) -> [Help 1]

我需要做什么才能让maven在pom中安装更新版本?显然,一个糟糕的 hackish 解决方案是使用 sed 并直接修改 pom 文件,但似乎 Maven 应该能够在安装 pom 时实际利用命令行设置。否则,在命令行上设置参数的能力似乎非常有限。

最佳答案

更好的是,您可以在 pom.xml 中设置您的属性在 <properties>像这样的标签 -

<properties>
    <property>
        <name>some-version</name>
        <value>1.6.2</value>
    </property>
</properties>  

如果您使用它,那么您不必在每次发出 mvn 时都提供该属性来自终端的命令。

关于java - Maven 安装不考虑命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30126049/

相关文章:

java - 线程信号序列

java - junit 测试用例通过,但仍在控制台 java 中打印异常

java - 异常、算术异常和对象

git - 如何依赖GitHub上Maven管理的项目?

java - 子容器在启动期间失败(Apache Tomcat 8.5 不再工作)

shell - 命令行工具的使用语句中打印的参数顺序是否有标准?

命令行参数可用于其他函数吗?

java - 如何在cxf拦截器中获取camel交换

java - 使用 Maven 隐藏 list 条目

python - 将参数传递给 nosetest