2011-09-22 244 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

相关问题