gpt4 book ai didi

java - 使用 Maven 进行更智能的原生依赖处理

转载 作者:搜寻专家 更新时间:2023-10-31 08:04:06 25 4
gpt4 key购买 nike

我目前正在将一个大型多模块项目(约 100 个子模块)转换为使用 Maven。目前我们使用 Ant + Ivy。

到目前为止,没有出现重大问题,我很高兴 Maven 仍然是一个很好的选择。但是,我想知道是否有更好的方法来处理 native 依赖项。

到目前为止,我得出以下结论。

  1. 最好将每个 native 依赖项作为独立库或包含多个依赖项的存档包安装到 maven 存储库中。
  2. 我没有迷失在使用 Maven 依赖项插件声明每个依赖项的过程中,而是选择为每个项提供一个分类器(例如 natives-win32)并在父 POM 中使用以下内容:

            <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.4</version>
    <executions>
    <execution>
    <id>copy</id>
    <phase>compile</phase>
    <goals>
    <goal>copy-dependencies</goal>
    </goals>
    <configuration>
    <includeScope>runtime</includeScope>
    <includeClassifiers>natives-win32</includeClassifiers>
    <outputDirectory>${project.build.directory}/natives</outputDirectory>
    </configuration>
    </execution>
    </executions>
    </plugin>

到目前为止,这似乎是一个简单的全方位解决方案,不需要为添加新的 native 依赖项而费心费力。它还为我提供了一个简单的全方位解决方案来管理本地人。我必须做的唯一一件事就是确保我的/natives/目录是在 java.library.path 上定义的。

关于这种方法让我(有点)困扰的一件事是,我所有的 native 依赖项都被复制到每个表达对它们的传递依赖项的子模块,而我的快乐 jar 库被添加到引用的类路径中它们位于我的本地存储库中(不需要副本)。

有没有办法更聪明地解决这个问题,让我的本地人从他们的存储库位置引用(假设我没有将他们存档,即 dll)。这将节省大量不必要的复制。

对于上述方法,是否还有我应该关注的任何其他潜在问题?

最佳答案

您的代码片段显示了附加到构建阶段的目标,而不是依赖项。 super pom 中的“复制依赖项”目标是否被所有模块继承?没有办法只将它移动到将要运行/打包为应用程序的模块吗?

关于java - 使用 Maven 进行更智能的原生依赖处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10068775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com