具有本机依赖性和复制文件的Maven项目

Nam*_*912 6 dll dependencies copy maven transitive-dependency

我有以下场景:

mylib是一个库(我有源​​代码,所以我想把它们放到maven项目mylib:mylib中).这个库有一个jar依赖项,我只有jar,而且它不能在Maven存储库中找到(我也不想在那里安装它).为了使它编译,这样的东西可以工作:将jar文件添加到"lib"文件夹中的mylib项目,例如"lib/thirdpartylib.jar"和mylib的pom.xml中,添加一个自选组的依赖项/工件/版本和" <scope>system</scope><systemPath>${project.basedir}/lib/thirdpartylib.jar</systemPath>"条目.mylib项目将编译正常.

请注意,mylib还具有对dll文件的运行时依赖性,例如thirdparty.dll.但是对于编译来说这并不重要.

但是,现在我想知道如何实现以下目标:

任何其他项目,例如项目"X",使用 mylib,将需要

- mylib.jar
- thirdpartylib.jar
- thirdpartylib.dll
Run Code Online (Sandbox Code Playgroud)

,

并且它必须将java.library.path设置为目录(例如"."),以便执行VM找到第三方jar和dll.

我关心的是:我希望第三方jar/dll是mylib项目的责任.即我想定义知识,你需要将第三方jar和dll复制到目标文件夹,java.library.path引用它们,成为mylib项目的一部分(mylib pom知道事情是怎样的用于其他项目).然而,我希望这些知识(即复制指令,无论它们是如何在Maven中完成)以传递方式移交给使用mylib的任何其他项目,例如X. 这有可能吗?

[我现在的黑客解决方案是我在X中有第三方的副本,但即便如此我也不知道如何复制/处理dll文件,所以我必须写一个自述文件说dll文件有被复制到执行VM的bin文件夹中).

任何建议表示赞赏!

mli*_*elt 2

基本思想如下:

  • Maven 擅长处理每个 Maven POM 的一个结果。
  • 可以仅在本地存储库中拥有库和这些库的依赖项。

所以你必须执行以下步骤:

  1. 为附加库定义一个单独的项目(或项目中的模块),并将库定义为结果。
  2. 更改您的 POM,以便该 POM 现在依赖于新项目。
  3. 对 DLL 执行相同的步骤(请参阅文章使用 Maven 管理 DLL 依赖项)如何执行此操作)。
  4. 将附加库和 DLL 部署到本地存储库。

现在您应该能够再次使用 Maven 进行构建过程,并且通过使用其他插件(例如 )maven-assembly-plugin,您可以将所有内容打包在一起。