Maven部署和依赖项的版本

时间:2013-04-16 11:37:30

标签: maven

当我在子pom中将依赖项版本定义为父pom中的属性的项目上运行mvn deploy时,版本号不会在已部署的工件中展开。

在此示例中,$ {spring.version}未展开。我可以让maven扩展版本属性吗?

家长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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>TestProject</groupId>
<artifactId>TestProject</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

<modules>
    <module>test</module>
</modules>

<properties>
    <spring.version>3.2.2.RELEASE</spring.version>
</properties>

<distributionManagement>
    <snapshotRepository>
        <id>dips_snapshot</id>
        <url>http://mavenrepo.dips.local/repository/dips_snapshot</url>
    </snapshotRepository>
</distributionManagement>
</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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>TestProject</groupId>
<artifactId>subproject</artifactId>
<version>1.0-SNAPSHOT</version>

<parent>
    <groupId>TestProject</groupId>
    <artifactId>TestProject</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<dependencies>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${spring.version}</version>
    </dependency>
</dependencies>

已部署pom:

<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>TestProject</groupId>
<artifactId>subproject</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>TestProject</groupId>
<artifactId>TestProject</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</project>

2 个答案:

答案 0 :(得分:1)

您似乎需要在本地安装(甚至部署)父pom。为此,您只需运行:

mvn clean install -N
在您的父项目目录中

-N选项不是强制性的,它只会停止递归(所以它会非常快,因为只安装了父pom)

答案 1 :(得分:1)

我更喜欢一个不同的项目组织,其中父母和聚合是分开的。我使用一个聚合器项目,它包含我的普通项目作为模块和一个父项目,它也是我的聚合器项目的一个模块。此父项目在所有普通项目和聚合器之间共享。我的父项目和普通项目存储在聚合器项目目录的子目录中,并且相应地设置了每个relativePath元素的parent

只要您从聚合器项目目录执行构建,该组织就可以更好地分离关注点并确保正确处理项目间依赖关系。