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

2022-09-02 01:48:27

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

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

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

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


答案 1

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

mvn dependency:copy-dependencies

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

mvn dependency:copy-dependencies -DincludeScope=runtime

答案 2

好吧,这里有几个问题在起作用。Maven 做了一项艰苦的工作,找出构建库所需的所有依赖项并下载它们。这些依赖项存储在 Maven 存储库的本地 (),但除非需要将它们作为程序集的一部分,否则您将无法在文件夹中找到它们。至少,默认情况下不是。您首先需要做的是让 Maven 将所有依赖项存储在 build 文件夹中(此 POM 摘录摘自另一篇 SO 帖子):<user home>/.m2/repositorytarget

<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 依赖项,并将它们包含在类路径中(从 )。我建议将它们复制到工作站上的另一个文件夹,因为每次执行 Maven 构建的库的目标时,该文件夹都会被 nuked。target/libtargetclean

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

无论如何,祝您好运,无论您选择哪种方法。


推荐