2013-04-16 117 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

只要您從聚合器項目目錄執行構建,此組織可以更好地分離問題並確保正確處理項目間依賴關係。