2011-09-22 55 views
6

我有以下情形:與本地的依賴和複製Maven項目文件

MYLIB是一個庫(對此我有來源,所以我想將它們放到一個Maven項目MYLIB:例如MYLIB )。這個庫有一個jar依賴項,我只有這個jar,並且它不在Maven倉庫中找到(我也不想在那裏安裝它)。爲了進行編譯,類似這樣的工作將會起作用:將jar文件添加到「lib」文件夾中的mylib項目中,例如「lib/thirdpartylib.jar」和mylib的pom.xml中,添加一個自選組/ artifact /版本和一個「<scope>system</scope><systemPath>${project.basedir}/lib/thirdpartylib.jar</systemPath>」條目的依賴關係。 mylib項目會很好地編譯。

請注意,mylib還具有運行時依賴於dll文件,如thirdparty.dll。但是編譯這個並不重要。

不過,現在我想知道如何實現以下目標:

任何其他項目,例如項目 「X」,即使用 mylib中,將需要

- mylib.jar 
- thirdpartylib.jar 
- thirdpartylib.dll 

,它會具有對的java.library.path設置的目錄(如 「」),使得第三方的jar和dll被執行的VM找到。

我的擔心是這樣的:我想第三方jar/dll的東西是mylib項目的責任。即我想定義知識,你需要將第三方jar和dll複製到目標文件夾,並且java.library.path引用它們,作爲mylib項目的一部分(mylib pom知道該怎麼做用於其他項目)。然而,我想要這些知識(即複製指令,無論它們在Maven中如何精確完成)通過mylib傳遞給任何其他項目,例如X.這是否有可能?

[我現在黑客的解決方案將是我在X的第三方東西的清單,但即使如此,我不知道如何複製/處理DLL文件,所以我不得不寫自述說,該dll文件必須被複制到正在執行的虛擬機的bin文件夾中)。

任何建議表示讚賞!

回答

2

的基礎理念是:

  • Maven是與每Maven的POM一個結果處理好。
  • 只有本地存儲庫中的這些庫可能具有庫和依賴項。

所以,你必須執行以下步驟:

  1. 定義附加庫單獨的項目(或項目中的模塊),並定義庫作爲結果。
  2. 更改您的POM,以便此POM現在對新項目具有依賴性。
  3. 爲您的DLL執行相同的步驟(請參閱文章Managing DLL dependencies with Maven)如何做到這一點)。
  4. 將您的其他庫和DLL部署到本地存儲庫。現在

你應該能夠再次使用Maven構建過程,並通過使用附加的插件,像maven-assembly-plugin,您可以打包在一起。

13

我建議打開文件到Maven的模塊,通過安裝他們到本地倉庫使用Maven install plug-in

mvn install:install-file \ 
    -DgroupId=com.demo \ 
    -DartifactId=thirdpartylib \ 
    -Dversion=1.0 \ 
    -Dfile=thirdpartylib.jar 

mvn install:install-file \ 
    -DgroupId=com.demo \ 
    -DartifactId=thirdpartylib-runtime \ 
    -Dversion=1.0 \ 
    -Dpackaging=dll 
    -Dfile=thirdpartylib.dll 

一個關於這種方法的巧妙的事情是,Maven的POM會自動生成。

MYLIB項目現在宣稱的第三方模塊,在其正常的依賴關係的POM文件:

<dependencies> 
    <dependency> 
     <groupId>com.demo</groupId> 
     <artifactId>thirdpartylib</artifactId> 
     <version>1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.demo</groupId> 
     <artifactId>thirdpartylib-runtime</artifactId> 
     <version>1.0</version> 
     <scope>runtime</scope> 
    </dependency> 
</dependencies> 

現在,當MYLIB模塊由其他模塊引用(作爲一個依賴)的第三方模塊將也可以作爲傳遞依賴性下載。

+0

我堅持你的解決方案,謝謝你。 – mtrovo

相關問題