我有以下场景:
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”,即usesmylib,将需要
- mylib.jar
- thirdpartylib.jar
- thirdpartylib.dll
,
并且必须将 java.library.path 设置为目录(例如“.”),以便执行虚拟机能够找到第三方 jar 和 dll。
我担心的是:我希望第三方 jar/dll 的东西由 mylib 项目负责。 IE。我想定义知识,您需要将第三方 jar 和 dll 复制到目标文件夹,并且 java.library.path 引用它们,以成为 mylib 项目的一部分(mylib pom 知道事情是如何发生的)用于其他项目)。然而,我希望将这些知识(即复制指令,无论它们在 Maven 中是如何完成的)传递给使用 mylib 的任何其他项目,例如 X。这有可能吗?
[我现在的黑客解决方案是,我有 X 中第三方内容的副本,但即便如此,我也不知道如何复制/处理 dll 文件,所以我必须写一个自述文件,说明 dll 文件有复制到正在执行的 VM 的 bin 文件夹中)。
任何建议表示赞赏!
基本思想如下:
- Maven 擅长处理每个 Maven POM 的一个结果。
- 可以仅在本地存储库中拥有库和这些库的依赖项。
所以你必须执行以下步骤:
- 为附加库定义一个单独的项目(或项目中的模块),并将库定义为结果。
- 更改您的 POM,以便该 POM 现在依赖于新项目。
- 对您的 DLL 执行相同的步骤(请参阅帖子使用 Maven 管理 DLL 依赖项) 怎么做)。
- 将附加库和 DLL 部署到本地存储库。
现在您应该能够再次使用 Maven 进行构建过程,并使用其他插件,例如maven-assembly-plugin
,您可以将所有内容打包在一起。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)