如何在Maven中设置从依赖项引用的属性

时间:2012-08-29 09:53:24

标签: maven properties dependency-management

在我的项目中,我有了maven的依赖 顺便说一下:

<dependency>
   <groupId>org.mule.modules</groupId>
   <artifactId>mule-module-activiti</artifactId>
   <version>3.2.0</version>
</dependency>

在此依赖项POM中,存在已使用但未定义的属性 - ${activiti.version}

我找到如何设置此属性的唯一方法是在命令行上指定它,如mvn -Dactiviti.version=5.10

有没有办法在我的项目POM中指定这个属性?
<properties><activiti.version>5.10</activiti.version></properties>不起作用。

我希望我能把问题弄清楚 谢谢你的帮助。

修改

如果您创建具有依赖关系的新maven项目,我可以重现我正在尝试解决的情况:

<dependency>
   <groupId>org.mule.modules</groupId>
   <artifactId>mule-module-activiti</artifactId>
   <version>3.2.0</version>
</dependency>

并提供所需的存储库:

  <repositories>
        <repository>
            <id>muleforge-repo</id>
            <name>MuleForge Repository</name>
            <url>http://repository.muleforge.org/release</url>
            <layout>default</layout>
        </repository>

        <repository>
            <id>codehaus-repo</id>
            <name>Codehaus Repository</name>
            <url>http://dist.codehaus.org/mule/dependencies/maven2</url>
            <layout>default</layout>
        </repository>
        <repository>
            <id>activiti</id>
            <name>Activiti</name>
            <url>https://maven.alfresco.com/nexus/content/groups/public/</url>
        </repository>
    </repositories>

编辑2:

以下是 org.mule.modules的POM:mule-module-activiti:3.2.0 ,我的项目所依赖的库。在这个pom里面,他们使用表达式${activiti.version}。但是他们为此表达式设置值。 (没有类似<properties><activiti.version>5.10</activiti.version></properties>

的内容

问题是如何从我的 pom?

为此表达式设置值

3 个答案:

答案 0 :(得分:4)

您可以使用属性来定义版本:

<properties>
  <module-version>3.2.0</module-version>
</properties>
..
<dependency>
   <groupId>org.mule.modules</groupId>
   <artifactId>mule-module-activiti</artifactId>
   <version>${module-version}</version>
</dependency>

为什么不应该that work

您永远不应该通过命令行上的属性定义工件的版本,因为您将来无法重现这些工件,我怀疑这是否有效。

答案 1 :(得分:4)

好的,最后,经过几天的搜索和实验,我找到了解决问题的方法。

如果您需要在命令行上提供maven属性(谈论系统属性,这与 maven属性略有不同),您还可以使用插件来提供您的pom或单独的属性文件中的这些属性。

注意: 系统属性可用于覆盖您的dependecies中的maven属性。

像这样:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>properties-maven-plugin</artifactId>
    <version>1.0-alpha-2</version>
    <executions>
        <execution>
            <goals>
                <goal>set-system-properties</goal>
            </goals>
            <configuration>
                <properties>
                    <property>
                        <name>activiti.version</name>
                        <value>5.10</value>
                    </property>
                </properties>
            </configuration>
        </execution>
    </executions>
</plugin>

我希望这对某人有所帮助。

也很抱歉我的笨拙问题显然很难理解。

答案 2 :(得分:0)

确保您没有与外界交谈的代理设置。我只是尝试了你的配置,它的工作原理。我正在使用最新的Maven 3版本。