2013-04-16 97 views
0

当我在一个项目上运行mvn deploy时,子pom中的依赖项的版本被定义为父pom中的一个属性,版本号未在展开的工件中展开。Maven部署和依赖版本

在这个例子中$ {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> 
+0

你有什么错误? –

+0

这样做的时候我没有遇到任何错误,但是如果我使用超级pom来设置属性中依赖关系的版本,然后部署项目,则每个版本的部署工件都取决于指定的内容在超级pom。 – Thomas

+0

这样做的后果是,当我构建依赖于此的其他项目时,有时会出现此错误。 原因:org.sonatype.aether.resolution.ArtifactResolutionException:无法从/到springsource-repo(http:// repo。)传输工件commons-dbcp:commons-dbcp:pom:$ {commons.dbcp.version}。 springsource.org/release):索引64处路径中的非法字符:http://repo.springsource.org/release/commons-dbcp/commons-dbcp/$ {commons.dbcp.version}/commons-dbcp- $ { commons.dbcp.version} .pom – Thomas

回答

1

看来你需要在本地安装(甚至部署)父POM。为此,您可以简单地运行:

mvn clean install -N 

在您的父项目目录中。 -N选项不是强制性的,它只是停止递归(所以它会非常快,因为只有你的父母pom将被安装)

1

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

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