Maven依赖项未编译

时间:2014-02-21 01:46:34

标签: java maven dependencies repository

我在最后一个小时左右尝试让我的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>

2 个答案:

答案 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并了解其工作原理。