【问题标题】:Maven project with native dependency and copying files具有本机依赖和复制文件的 Maven 项目
【发布时间】:2011-09-22 13:28:12
【问题描述】:

我有以下场景:

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。但是对于编译来说,这并不重要。

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

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

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

,

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

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

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

欢迎提出任何建议!

【问题讨论】:

    标签: dll maven dependencies copy transitive-dependency


    【解决方案1】:

    基本思路如下:

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

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

    1. 为附加库定义一个单独的项目(或项目中的一个模块)并将库定义为结果。
    2. 更改您的 POM,以便此 POM 现在对新项目具有依赖关系。
    3. 对您的 DLL 执行相同的步骤(请参阅帖子 Managing DLL dependencies with Maven)如何执行此操作)。
    4. 将您的附加库和 DLL 部署到本地存储库。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多