我遇到了将属性从多模块项目的超级pom传递到子pom的问题.
目前我有以下文件: superpom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0                               http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>...</groupId>
    <artifactId>meta-all</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>
    <properties>
        <databasedriver>net.sourceforge.jtds.jdbc.Driver</databasedriver>
    </properties>
    <modules>
        <module>child1</module> 
    </modules>
</project>
孩子pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>...</groupId>
    <artifactId>child1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>sql-maven-plugin</artifactId>
                <version>1.5</version>
                <!-- JDBC Driver -->
                <dependencies>
                    <dependency>
                        <groupId>net.sourceforge.jtds</groupId>
                        <artifactId>jtds</artifactId>
                        <version>1.3.1</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <driver>${project.parent.databasedriver}</driver>
                  ...
                    <autocommit>true</autocommit>
                    <delimiter>GO</delimiter>
                    <delimiterType>row</delimiterType>
                </configuration>
                <executions>
但是,我不知道为什么我无法获取插件配置来检索超级pom的属性.
http://maven.apache.org/pom.html#Properties表示属性"值可在POM内的任何位置访问".
这应该是" 在POM内的大多数地方都可以访问"吗?
我可以指定依赖的版本没有问题,如下所示:
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>${junit.version}</version>
    <scope>test</scope>
</dependency>
但是项目本身的版本如何:
<project xmlns="http://maven.apache.org/POM/4.0.0" ...>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <version>${myversion}</version>
    <properties>
        <myversion>8</myversion>
    </properties>
    <modules>
        <module>alpha</module>
        <module>beta</module>
    </modules>
    ...
如果我尝试这个<version>将不会取值8.这里我在pom中定义了$ {myversion}但是如果我在命令行中指定-Dmyversion = 8,情况似乎也是如此.
如果其中一个模块使用硬编码版本号指定其父级,如下所示:
<parent>
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <version>8</version>
</parent>
当我尝试构建然后当maven来看模块的pom时,它会说它无法找到版本8的给定父pom.
但是,如果我将父版本中的版本硬编码为8,而不是使用$ {myversion},那么一切正常.
所以在我看来,父pom的/ project/version标签不会发生属性替换.
是这种情况还是对我似乎看到的内容有其他解释?
问候,
/乔治
正如你从标题中看到的那样,我想问一下Maven 3中的情况不再支持pom.xml中的$ version.我们是否必须一次又一次地在每个pom.xml和相关配置文件中的每个项目中写一个常量?我们怎么能避免这样做?我们如何使用像$ version这样的版本控制方法?
我正在考虑重组一个大型Maven项目......
我们当前结构的基本概述:
build [MVN plugins, third party dependency management]:5.1
   NRW Utils:6.0.0.0-beta12-SNAPSHOT
      server-utils:6.0.0.0-beta12-SNAPSHOT
      ... 
   CMW Root:6.0.0.0-beta12-SNAPSHOT
      cmw-webapp:6.0.0.0-beta12-SNAPSHOT
      cmw-core [dependencies on NRW Utils]:6.0.0.0-beta12-SNAPSHOT
      ...
   NRW Root :6.0.0.0-beta12-SNAPSHOT
      nrw-webapp [depends on NRW Utils & CMW Root modules]:6.0.0.0-beta12-SNAPSHOT
      ...
改变的原因:
每个集合模块(即NRW Utils,CMW Root和NRW Root)的大小越来越大,构建过程开始耗费无法忍受的时间(有时约为4小时).
新计划:
build [MVN plugins, third party dependency management]:5.1
   NRW Utils:6.0.0.0-NU-beta4-SNAPSHOT
      server-utils:6.0.0.0-NU-beta4-SNAPSHOT
      ... 
   CMW Root:6.0.0.0-CMW-beta12-SNAPSHOT
      cmw-webapp:6.0.0.0-CMW-beta12-SNAPSHOT
      cmw-core [dependencies on NRW Utils]:6.0.0.0-CMW-beta12-SNAPSHOT
      ...
   NRW Root :6.0.0.0-NRW-beta9-SNAPSHOT
      nrw-webapp [depends on NRW Utils & CMW Root modules]:6.0.0.0-NRW-beta9-SNAPSHOT
      ...  
我们已经开始在版本中引入"键"以区分不同的"集体模块",因此可以轻松执行步进版本.此外,我们的实用程序模块更稳定,因此我们可能不需要几乎同样多的beta版本 - 现在没有限制保持beta数同步.
值得注意的是,实际上有5个不同的"集体模块"(不仅仅是3个)都是用不同的版本构建的(以独特的键区分),这就是为什么我认为拥有一个集中的地方是很好的版本,而不是5个不同POM中的重复属性.
现在的问题在于在定义不同版本的不同"集合模块"中的模块的依赖关系时POM文件的内容.
建议的依赖版本管理解决方案: …
maven ×3
maven-2 ×3
maven-3 ×2
properties ×2
multi-module ×1
pom.xml ×1
substitution ×1
version ×1
versioning ×1