Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven安装不考虑命令行参数_Java_Maven_Command Line Arguments_Pom.xml - Fatal编程技术网

Java Maven安装不考虑命令行参数

Java Maven安装不考虑命令行参数,java,maven,command-line-arguments,pom.xml,Java,Maven,Command Line Arguments,Pom.xml,我有一个项目,我正试图与maven一起安装。pom.xml中有一些属性,这些属性在运行maven install命令时会被修改,具体取决于我们试图使用的库的任何版本: <properties> <some-version>0</some-version> </properties> 使用以下命令行通过make进行构建: mvn -Dsome-version=1.6.2 Maven能够按照预期正确解析版本和构建。但是,安装在本地maven存储

我有一个项目,我正试图与maven一起安装。
pom.xml
中有一些属性,这些属性在运行maven install命令时会被修改,具体取决于我们试图使用的库的任何版本:

<properties>
  <some-version>0</some-version>
</properties>
使用以下命令行通过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:~/$ 

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

最好在
标记中的
pom.xml
中设置属性,如下所示-

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

一些版本
1.6.2

如果使用此选项,则无需在每次从终端发出
mvn
命令时提供属性。

mvn-Dsome version=1.6.2用作建筑范围的替换值,而不是用新值替换原始POM。这就是你看到的行为。我不知道有任何maven支持这样做。

在@JoopEggen的建议下,我深入研究了maven版本插件。它提供了一个更新属性目标,它将实际更新磁盘上的pom.xml值,而不仅仅是在构建阶段传递覆盖。我打电话解决了我的问题

mvn versions:update-property -Dproperty=some-version -DnewVersion=1.6.2 -DsearchReactor=false -DallowSnapshots=true

在调用mvn安装之前,在makefile中。禁用reactor是防止插件拒绝在远程repo中找不到的值所必需的(请参阅),allowSnapshots允许我使用版本号,如1.6.2-SNAPSHOT,这在测试时很有用。

我们在命令行中设置它,因为版本不是恒定的。硬编码显然解决了列出的问题,但首先不适用于用例-因此我们通过命令行设置它。最好将插件与其命令一起使用。我们已经使用了版本插件,但据我所知,仅设置项目本身的版本。它不能解决设置属性的问题。是的,它的工作方式正好相反。我假设您有一个具有父层次结构的多模块项目。抱歉,如果页面上的示例没有提供解决方案。还有一个核心问题。首先,动态更改依赖项的版本听起来很奇怪,因为如果您使用特定版本进行构建,这会向用户显示您的项目在该版本中使用此依赖项(transitve依赖项)。问题是,如果调用安装,为什么需要更改它?如果库的版本更改,为什么不更改pom并签入更改。您可能会考虑将依赖项定义为scope:runtime,或者您需要将依赖项定义为可选项?@JoopEggen,我深入研究了版本插件。它有一个选项,看起来它完全符合我的需要,但预期的行为不存在:
<properties>
    <property>
        <name>some-version</name>
        <value>1.6.2</value>
    </property>
</properties>  
mvn versions:update-property -Dproperty=some-version -DnewVersion=1.6.2 -DsearchReactor=false -DallowSnapshots=true