我正在使用一个使用Maven编译和测试的库 我能够毫无问题地编译库。在编译时,似乎它下载了库的所有依赖项。
现在,我正在尝试在我的项目中使用该库。当我编译库时,我发现在库文件夹中创建了一个名为target
的文件夹,在该文件夹中,有另一个名为classes
的文件夹。我将classes
文件夹添加到了我的类路径中。但是,每当我尝试在我的项目中使用不使用Maven的库时,它就说它无法找到该库的依赖项。
如何将所有库的依赖项添加到类路径中?
我是否需要手动下载所有库的依赖项并将它们添加到类路径中?
有什么方法可以让Maven为我做这件事吗?
我需要做什么才能在项目中使用库?
我的项目与库完全不同。现在,我的项目似乎能够正确加载库文件,但不是库依赖项。
答案 0 :(得分:14)
当您为该库执行mvn install
时,它应该创建一个jar文件并将其放在target/libaryname-version.jar
。最好依赖这个最终的jar而不是classes
文件夹的内容。 Maven还有一个目标,即下载项目的所有依赖项。你可以执行
mvn dependency:copy-dependencies
在libraries文件夹中,它会将所有依赖项jar复制到target/dependency
。默认情况下,这还包括仅用于测试的jar,以排除可以使用的
mvn dependency:copy-dependencies -DincludeScope=runtime
答案 1 :(得分:4)
嗯,这里有几个问题在起作用。 Maven努力确定构建和下载库所需的所有依赖项。这些依赖项本地存储在Maven存储库(<user home>/.m2/repository
)中,但除非它们作为程序集的一部分需要,否则您将无法在target
文件夹中找到它们。至少,不是默认情况下。首先需要做的是让Maven将所有依赖项存储在build文件夹中(这个POM摘录来自another SO post):
<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构建库的target
目标时,clean
文件夹都会被激活。
现在说了这么多,为什么不调整你的项目以使用Maven呢?那么您需要做的就是将顶级JAR作为POM中的依赖项包含在内,Maven将处理其所有子依赖项?毕竟这就是Maven的力量 - 利用它对你有利。
无论如何,祝你选择两种方法中的任何一种都好运。