将manifest-first maven项目的依赖关系打包到jar中

时间:2014-07-17 15:25:13

标签: java jar eclipse-plugin maven-assembly-plugin tycho

我想将我的maven tycho eclipse-plugin项目的依赖项打包到jar文件中,就像描述here一样,但是有一个像eclipse-plugin项目那样的清单优先项目。我不想在pom.xml中列出所有eclipse-plugin依赖项,有没有办法让assembly-plugin或shade-plugin与MANIFEST.MF文件一起工作?

我想在其他项目中使用eclipse-plugin,因此应该将插件打包到一个带有依赖项的jar中(eclipse插件依赖项)。

行家组装-插件:

         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <archive>
                    <addMavenDescriptor>false</addMavenDescriptor>
                    <manifest>
                        <addClasspath>true</addClasspath>
                    </manifest>
                </archive>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

只收集pom文件中的依赖项,而不是来自manifest - &gt; jar-with-dependencies等于普通jar,但jar-with-dependencies中的manifest文件是一个新的简单文件,而不是项目中的原始清单。

mvn assembly:程序集失败:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.2-beta-5:assembly (default-cli)
on project parent:
Error reading assemblies: No assembly descriptors found.

Tycho deps: mvn assembly:程序集以mvn install开头:

  • 计算目标平台
  • 解决依赖关系
  • 解析课程路径

...为每个模块

2 个答案:

答案 0 :(得分:1)

我认为maven-dependency-plugin就是你要找的东西。 我以下面的方式使用它,它将所有清单依赖类包含在我的ouptut jar中。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <version>2.10</version>
  <executions>
    <execution>
      <id>unpack-dependencies</id>
      <phase>prepare-package</phase>
      <goals>
        <goal>unpack-dependencies</goal>
      </goals>
      <configuration>
        <includes>**/*.class</includes>
        <excludes>**/*.properties</excludes>
        <outputDirectory>target/classes</outputDirectory>
        <overWriteReleases>false</overWriteReleases>
        <overWriteSnapshots>true</overWriteSnapshots>
      </configuration>
    </execution>
  </executions>
</plugin>

答案 1 :(得分:0)

不幸的是,似乎不可能使用maven-shade-pluginmaven-assembly-plugin来打包由Tycho计算的依赖项。

我通过maven-shade-pluginmaven-dependency-plugin进行了调试,maven-dependency-plugin成功从Tycho中获取了依赖关系。

原因:似乎Tycho将基于Manifest的依赖项注入SYSTEM范围依赖项(toString()的{​​{1}})。

project.getArtifacts()

但是,每个Maven mojo必须通过插件描述符属性...p2.eclipse-plugin:org.eclipse.jdt.debug:jar:jdimodel.jar:3.7.101.v20120913-153601:system, p2.eclipse-plugin:org.eclipse.jface:jar:3.8.0.v20120912-135020:system... 定义其所需的依赖项解析。 requiresDependencyResolution定义maven-shade-plugin。此范围不包括requiresDependencyResolution = ResolutionScope.RUNTIME依赖项。

我暂时将插件描述符修改为system,而test就像魅力一样。但是,我不知道有任何方法可以覆盖maven mojo的插件描述符的属性。

由于maven-shade-plugin定义了更小的范围maven-assembly-plugin,所以tycho依赖项也不适用于此插件。

另见:Discussion