maven汇编:单一不解决依赖

时间:2016-09-20 13:39:07

标签: eclipse maven jar

我正在尝试创建一个解决了所有依赖项的jar,以便我可以从命令提示符运行此jar。我正在使用maven assembly:single,但每当我这样做时,我都会遇到问题

[ERROR] com.XXX.XXXX.XXX:XXX-XXX-XXX:jar:XXX
[ERROR]
[ERROR] from the specified remote repositories:
[ERROR] A (http://XXXXX/, releases=true, snapshots=true),
[ERROR] B (http://XXXX/, releases=true, snapshots=true),
[ERROR] C (https://repo.maven.apache.org/maven2/, releases=true, snapshots=true
),
[ERROR] D (https://XXXXX, releases=false, snapshots=true)
[ERROR] Path to dependency:
[ERROR] 1) com.test.Report:myjar:jar:0.0.1-SNAPSHOT
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e swit
ch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please rea
d the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionE
xception

这是我正在使用的pom 现在这些罐已经解析并存在于Maven Dependency文件夹中。我可以从Eclipse运行整个项目,但是需要将这个jar提供给包含所有jar的客户端。任何帮助表示赞赏。谢谢:))

2 个答案:

答案 0 :(得分:0)

一种方法是在pom.xml中使用“jar-with-dependencies”配置。这将把你所有的依赖包装在jar中 例如:

<build>
    <plugins>
      <!-- any other plugins -->
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
      </plugin>
    </plugins>
  </build>

另一种方法是使用maven shade plugin。 例如:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.4.3</version>
        <configuration>
          <!-- put your configurations here -->
        </configuration>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  ...
</project>

maven shade插件基本上会在最后创建两个jar。第一个jar是普通的jar,它只包含源代码的编译类 第二个jar也将包含已编译的类它还将包含来自所有依赖项的类文件。这是你应该给你的客户的罐子。

答案 1 :(得分:0)

确定。可能没有人会看到这个答案,但我仍然希望有一个关于我未来自我的笔记。这个问题与我得到的例外不同。要运行任何plugin,请确保<plugin>位于<plugins>内的<build>内(不在<pluginManagement>下)。这样就运行了插件,并在mvn install上形成了带有依赖关系的jar。