2009-10-29 52 views
1

我的公司爲使用該軟件的Java API的項目管理軟件編寫配套產品。他們發佈了新版本的API,併發布了新版本的產品,並且還針對錯誤修復等發佈了指導。我們需要爲使用各種版本的軟件(以及擴展API)的客戶提供支持。爲了在沒有不必要的代碼重複的情況下實現這一點,我們在產品中定義了包含每個API版本所需的依賴關係的配置文件。在依賴POM中激活配置文件?

我有一個使用這種技術構建的戰爭項目,激活了「api70」配置文件,另一個項目依賴於該戰爭項目的一種類型的pom,以吸引戰爭的依賴。問題在於,在構建第二個項目時,雖然我在構建依賴項目時在maven命令行上定義了-Papi70,但未包含特定於配置文件的依賴項。

有沒有什麼辦法讓這個工作?

在戰爭項目:

<!-- API 7.0 profile. --> 
<profile> 
    <id>api70</id> 

    <dependencies> 
    <dependency> 
     <groupId>com.bigcompany</groupId> 
     <artifactId>integrationlibrary</artifactId> 
     <version>7.0-a</version> 
    </dependency> 
    </dependencies> 

    <properties> 
    <apiversion>api70</apiversion> 
    </properties> 

</profile> 

在根據項目:用於建築

<!-- Depend on war as type=pom for dependency mediation. --> 
<dependency> 
    <groupId>com.mycompany</groupId> 
    <artifactId>warproject</artifactId> 
    <version>${warVersion}</version> 
    <type>pom</type> 
</dependency> 

命令行根據項目:

mvn -P api70 clean package 

產生的構建不包括integrationlibrary或其任何傳遞依賴。

+0

「另一個項目」,依賴於戰爭的包裝是什麼?這個項目是否繼承戰爭項目? – 2009-10-29 22:49:21

+0

@ user19113:配置文件不是傳遞性的,不會被繼承。您只能通過父POM共享相同的配置文件才能這樣做。 – 2011-01-28 16:08:08

回答

0

我認爲你的問題根本不適用於配置文件。這是關於傳遞依賴如何適用於戰爭包裝。通過設計他們不工作:)戰爭歸檔包含其在WEB-INF/lib文件夾中的依賴關係,或者如果它被包裝在耳朵中,它可以共享庫與耳庫。更多的問題,你可以閱讀這個wiki article。這是關於瘦身戰爭,但話題也涉及你的問題。

爲您感興趣的還有this JIRA issue

快速但不優雅的解決方案是將包裝形式的戰爭改成pom(或者用pom包裝創建重複的pom)。

0

爲什麼不創建一個api70-deps pom項目,並讓你的戰爭和依賴項目都將它拉入,配置文件已激活或以其他方式?

這種方法對我來說是奇蹟......我的poms變得更加整潔。