我在最后一个小时左右尝试让我的Maven项目包含来自其依赖项的源文件,但由于某种原因,它不是。我已经按照以下链接提供的步骤进行了操作,但是当我编译并运行插件时,我得到了一个ClassNotFoundException:
https://github.com/mkremins/fanciful
我确保将上面链接中的依赖项和存储库包含到我的pom.xml文件中,但是当我编译时,它们不会被添加到我的.jar文件中。
我使用Maven相当新,并且到目前为止都喜欢它,尽管解决这样的问题可能会很痛苦。
我正在通过以下方式构建项目:
右键点击项目 - >运行方式 - > Maven构建 - >目标:干净安装
经过一番搜索,我觉得这并不像我想象的那么容易。我将以下内容添加到我的pom.xml构建部分:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<minimizeJar>true</minimizeJar>
<artifactSet>
<includes>
<include>mkremins:fanciful</include>
<include>org.json:json</include>
</includes>
</artifactSet>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
唯一的问题是我还需要手动包含我想要使用的主库的依赖项 - mkremins:fanciful;是否有标志或选项来自动复制我需要的一个文件中的依赖项,而不是还包括<include>org.json:json</include>
?
答案 0 :(得分:2)
好吧,如果你想将你的依赖项复制到目标jar,你需要告诉maven这样做! Maven不知道你的项目的工件是否是自给自足的可执行jar,jar是在容器内执行还是仅仅是另一个项目的依赖项或库。
您可能希望使用maven-dependency-plugin
中的copy-dependencies任务例如:
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<includeScope>runtime</includeScope>
<outputDirectory>${project.build.directory}</outputDirectory>
<excludeTransitive>false</excludeTransitive>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
要进行更多调整,您可能还想使用jar插件和程序集插件。关于创建可执行jar的更多信息:
http://www.ibm.com/developerworks/java/library/j-5things13/index.html?ca=dat-
答案 1 :(得分:0)
你误解了Maven的想法。 Maven旨在使用位于Maven Central的依赖项。它的想法是不编译依赖项。我建议您阅读about Maven并了解其工作原理。