使用本地依赖项和复制文件的Maven项目

6
我有以下情况:
我的库mylib是一个库(我有源代码,所以我想将它们放入Maven项目mylib:mylib中)。该库具有一个JAR依赖项,我只有该JAR文件,并且无法在Maven存储库中找到它(我也不想在那里安装它)。要使其编译,可以执行以下操作:将JAR文件添加到mylib项目中的“lib”文件夹中,例如“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

并且它将需要设置java.library.path为目录(例如“。”),以便执行VM可以找到第三方jar和dll。

我的担忧是:我希望第三方jar / dll的事情成为mylib项目的责任。也就是说,我想定义需要将第三方jar和dll复制到目标文件夹中,并且java.library.path引用它们的知识,成为mylib项目的一部分(mylib pom知道在其他项目中如何使用该项)。然而,我希望这种知识(即复制说明,无论在Maven中如何实际完成)被传递到使用mylib的任何其他项目中,例如X。是否可能做到这一点?

【我目前的hack解决方案是,在X中有第三方内容的副本,但即使如此,我也不知道如何复制/处理dll文件,因此我必须编写自述文件,说明必须将dll文件复制到执行VM的bin文件夹中。)

如果您有任何建议,请告诉我!

1个回答

2
基本思想如下:
Maven擅长处理每个Maven POM的一个结果。
只能在本地存储库中使用库和这些库的依赖关系。
因此,您需要执行以下步骤:
1.为附加库定义一个单独的项目(或项目中的模块),并将该库定义为结果。
2.更改POM,使此POM现在具有对新项目的依赖关系。
3.按照“管理Maven的DLL依赖项”的帖子中所述的方式(请参见Managing DLL dependencies with Maven)进行DLL相同的步骤。
4.将附加库和DLL部署到本地存储库。
现在,您应该能够再次使用Maven进行构建过程,并通过使用其他插件(例如maven-assembly-plugin)将所有内容打包在一起。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接