2012-02-01 92 views
0

不同版本庫的我有一個NetBeans的模塊(Module.jar)在其pom.xml宣佈很大的依賴性:構建模塊與Maven的

<groupId>com.company</groupId> 
<artifactId>module</artifactId> 
<packaging>nbm</packaging> 
... 
<dependency> 
    <groupId>org.netbeans.api</groupId> 
    <artifactId>org-netbeans-modules-editor-lib</artifactId> 
    <version>${netbeans.version}</version> 
    <scope>runtime</scope> 
</dependency> 
<dependency> 
    <groupId>org.netbeans.api</groupId> 
    <artifactId>org-netbeans-modules-editor-lib2</artifactId> 
    <version>${netbeans.version}</version> 
</dependency> 
... 
<properties> 
    <netbeans.version>RELEASE701</netbeans.version> 
</properties> 

正如你可以看到,該版本被聲明爲變量netbeans.version

現在我有兩個使用此模塊的Netbeans平臺應用程序:ApplicationA使用NB平臺版本6.9.1和ApplicationB使用NB平臺7.0.1。雙方將宣佈Module作爲一個依賴:

<dependency> 
    <groupId>com.company</groupId> 
    <artifactId>module</artifactId> 
    <version>3.0.10</version> 
</dependency> 

Module編譯罰款與平臺的兩個版本,但如果用同樣的版本庫的編譯只會正常運行當前的應用程序使用(即Module會如果使用版本6.9.1進行編譯,則只能在ApplicationA上正常運行,並且如果使用版本7.0.1進行編譯,則只能在ApplicationB上正常運行)。

如何/在哪裏可以定義變量netbeans.version,那麼Module將根據將使用它的應用程序編譯正確版本的庫?

+0

你確定這是一個編譯的問題,或者更確切地說,你的模塊在不同版本的org-netbeans-modules-editor-lib中添加了運行時執行的事實嗎? – mrembisz 2012-02-01 12:27:32

+0

爲什麼不直接將模塊編譯爲較低版本並使NetBeans依賴項不可傳遞,或者在將模塊添加到項目時將其排除?這樣,項目將不得不定義netbeans版本,並且模塊不會以傳遞方式添加該依賴項。 – Thomas 2012-02-01 12:31:13

+0

@mrembisz,它可能是它在運行時加載不同的版本 - 無論哪種方式,不應該在某個地方指定版本,所以它總是會加載正確的版本?也編輯的問題,因爲一些(不是全部)庫使用'運行時'。 – Marcelo 2012-02-01 12:34:50

回答

1

你應該在正確的版本中直接在ApplicationA和ApplicationB的poms中包含netbeans依賴。這樣你將得到這個應用程序需要的確切版本。

+0

「模塊」使用約30個獨立於它的依賴關係(與'AppA'和'AppB'都沒有關係)。將它複製到這兩個應用程序的「pom.xml」是一個很好的做法/唯一的解決方案嗎?我可以看到這可能很快成爲維護災難。 – Marcelo 2012-02-01 12:52:55

+0

@Marcelo只有當你想執行一個特定的版本時,你才需要複製依賴關係。您的問題描述表明ApplicationA確實依賴於6.9.1版本的NetBeans庫,因此顯式定義此依賴關係似乎很自然。 – mrembisz 2012-02-01 13:20:57

相關問題