繁体   English   中英

将基于Maven的依赖项的传递依赖项收集到非Maven项目的类路径中

[英]Collecting Maven-based dependency's transitive dependencies to a non-Maven project's classpath

我正在使用一个使用Maven编译和测试的库。
我能够毫无问题地编译库。 在编译时,似乎它下载了库的所有依赖项。

现在,我正在尝试在我的项目中使用该库。 当我编译库时,我发现在库文件夹中创建了一个名为target的文件夹,在该文件夹中,还有另一个名为classes文件夹。 我将classes文件夹添加到了我的类路径中。 但是,每当我尝试在我的项目中使用不使用Maven的库时,它就说它无法找到该库的依赖项。

如何将所有库的依赖项添加到类路径中?
我是否需要手动下载所有库的依赖项并将它们添加到类路径中?
有什么方法可以让Maven为我这样做吗?
我需要做什么才能在项目中使用库?

我的项目位于与库完全不同的目录中。 现在,我的项目似乎能够正确加载库文件,但不是库依赖项。

当您为该库执行mvn install ,它应该创建一个jar文件并将其放在target/libaryname-version.jar 最好依赖于这个最终的jar而不是classes文件夹的内容。 Maven还有一个目标,即下载项目的所有依赖项。 你可以执行

mvn dependency:copy-dependencies

在libraries文件夹中,它会将所有依赖项jar复制到target/dependency 默认情况下,这还包括仅用于测试的jar,以排除您可以使用的jar

mvn dependency:copy-dependencies -DincludeScope=runtime

那么,这里有几个问题在起作用。 Maven努力确定构建和下载库所需的所有依赖项。 这些依赖项本地存储在Maven存储库( <user home>/.m2/repository )中,但除非它们作为程序集的一部分需要,否则您将无法在target文件夹中找到它们。 至少,不是默认情况下。 首先需要做的是让Maven将所有依赖项存储在build文件夹中(这个POM摘录是从另一个SO帖子中删除 ):

<project>
...
    <profiles>
        <profile>
            <id>qa</id>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-dependency-plugin</artifactId>
                            <executions>
                                <execution>
                                    <phase>install</phase>
                                    <goals>
                                        <goal>copy-dependencies</goal>
                                    </goals>
                                    <configuration>
                                        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                                    </configuration>
                                </execution>
                            </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

通过上面显示的POM更改,您现在应该能够获得库所需的所有JAR依赖项,并将它们包含在类路径中(来自target/lib )。 我建议将它们复制到工作站上的另一个文件夹,因为每次执行库Maven构建的clean目标时, target文件夹都会被激活。

现在说了这么多,为什么不调整你的项目以使用Maven呢? 那么您需要做的就是将顶级JAR作为POM中的依赖项包含在内,Maven将处理其所有子依赖项? 毕竟这是Maven的力量 - 利用它对你有利。

无论如何,祝你选择两种方法中的任何一种都好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM