相关疑难解决方法(0)

获取子模块中父POM中定义的属性[多模块项目]

我遇到了将属性从多模块项目的超级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>
Run Code Online (Sandbox Code Playgroud)

孩子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>
Run Code Online (Sandbox Code Playgroud)

但是,我不知道为什么我无法获取插件配置来检索超级pom的属性.

properties maven multi-module

23
推荐指数
1
解决办法
4万
查看次数

Maven:没有为pom的/ project/version标签进行属性替换?

http://maven.apache.org/pom.html#Properties表示属性"值可在POM内的任何位置访问".

这应该是" 在POM内的大多数地方都可以访问"吗?

我可以指定依赖的版本没有问题,如下所示:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>${junit.version}</version>
    <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

但是项目本身的版本如何:

<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>
    ...
Run Code Online (Sandbox Code Playgroud)

如果我尝试这个<version>将不会取值8.这里我在pom中定义了$ {myversion}但是如果我在命令行中指定-Dmyversion = 8,情况似乎也是如此.

如果其中一个模块使用硬编码版本号指定其父级,如下所示:

<parent>
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <version>8</version>
</parent>
Run Code Online (Sandbox Code Playgroud)

当我尝试构建然后当maven来看模块的pom时,它会说它无法找到版本8的给定父pom.

但是,如果我将父版本中的版本硬编码为8,而不是使用$ {myversion},那么一切正常.

所以在我看来,父pom的/ project/version标签不会发生属性替换.

是这种情况还是对我似乎看到的内容有其他解释?

问候,

/乔治

maven-2 properties substitution pom.xml

16
推荐指数
1
解决办法
2万
查看次数

为什么Maven 3会放弃支持应用程序$ version声明?

正如你从标题中看到的那样,我想问一下Maven 3中的情况不再支持pom.xml中的$ version.我们是否必须一次又一次地在每个pom.xml和相关配置文件中的每个项目中写一个常量?我们怎么能避免这样做?我们如何使用像$ version这样的版本控制方法?

versioning maven-2 version maven-3 maven

9
推荐指数
1
解决办法
1万
查看次数

关于大型项目版本控制和避免包含表达式的版本的Maven建议

我正在考虑重组一个大型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
      ...
Run Code Online (Sandbox Code Playgroud)

改变的原因:

每个集合模块(即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
      ...  
Run Code Online (Sandbox Code Playgroud)

我们已经开始在版本中引入"键"以区分不同的"集体模块",因此可以轻松执行步进版本.此外,我们的实用程序模块更稳定,因此我们可能不需要几乎同样多的beta版本 - 现在没有限制保持beta数同步.

值得注意的是,实际上有5个不同的"集体模块"(不仅仅是3个)都是用不同的版本构建的(以独特的键区分),这就是为什么我认为拥有一个集中的地方是很好的版本,而不是5个不同POM中的重复属性.

现在的问题在于在定义不同版本的不同"集合模块"中的模块的依赖关系时POM文件的内容.

建议的依赖版本管理解决方案: …

build-process maven-2 maven-3 maven

5
推荐指数
1
解决办法
2643
查看次数