使用Maven实现更智能的本机依赖性处理

S73*_*17H 6 java dependencies maven-3

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

到目前为止,没有出现任何重大问题,我觉得Maven仍然很合适.但是,我想知道是否有更好的方法来处理本机依赖项.

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

  1. 最好将每个本机依赖项安装到maven repo中,作为独立库或包含多个依赖项的归档包.
  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>
    
    Run Code Online (Sandbox Code Playgroud)

到目前为止,这似乎是一个简单的全面解决方案,不需要太多的麻烦添加新的本机依赖项.它还为我提供了一个简单的全方位管理本地解决方案.我唯一要做的就是确保在java.library.path上定义了我的/ natives /目录.

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

有没有办法变得更聪明,并让我的本地人参考他们的存储库位置(假设我没有存档,即dll).这样可以节省大量不必要的复制.

有没有其他潜在的问题,我应该关注上述方法?

S73*_*17H 0

我最终使用了Maven Natives 插件,并处理了这样一个事实:我周围有本地库的冗余副本。这样做的原因主要是由于该插件提供的简单性以及它还有一个相关的 eclipse 插件,可以在开发人员的 eclipse 环境中设置本机而无需干预。