在常规Maven构建中使用Eclipse p2存储库中的依赖项吗?

我想在“常规”Maven 3版本(例如JAR或WAR包装)中使用来自远程Eclipse p2存储库的依赖项 – 所有这些都没有将p2 repo转换为本地Maven仓库(这是osgi-to-maven2和m4e似乎做)。

理想情况下,我只使用http://maven.eclipse.org/nexus/ ,但那不(但是?)包含许多包。

使用Maven的systemPath不算数!

看起来我正在回答另一个我自己的问题..

首先,您可以使用Tycho从P2存储库添加对包的依赖:

  • 配置构建以使用tycho-maven-plugin。
  • 指定P2存储库。
  • 将包装设置为“eclipse-plugin”。
  • 为构建创建清单并使用Require-Bundle来声明依赖项(例如org.eclipse.xsd)。 同时将Bundle-Version设置为我们在pom.xml中构建的版本。

让我们尝试一下:

$ mvn dependency:tree [INFO] com.example:org.eclipse.xsd:eclipse-plugin:0.0.1 [INFO] +- p2.eclipse-plugin:org.eclipse.xsd:jar:2.6.0.v20100914-1218:system [INFO] ... [INFO] \- p2.eclipse-plugin:org.eclipse.core.filesystem:jar:1.3.1.R36x_v20100727-0745:system 

我们的依赖已成功从P2存储库中解析出来。 不幸的是,我们还没有完成。 已经在系统范围中添加了依赖项,这意味着如果我们创建依赖于构建的webapp,则不会包含工件。 要解决这个问题,我们首先将依赖项中包含的所有类解包到某个目录中,然后将该目录重新打包为jar并将其用作构建的最终工件。

对于第一部分(解包),我们将maven-dependency-plugin添加到我们的构建中,并将其配置为在包阶段运行其unpack-dependencies目标。 对于第二部分(重新打包),我们将maven-assembly-plugin添加到我们的构建中,并将其配置为在打包阶段运行其单一目标。 我们还需要创建和配置自定义程序集描述符。

我们的构建现在包含3个文件:pom.xml中的构建文件:

  4.0.0 com.example org.eclipse.xsd 0.0.1 eclipse-plugin   helios p2 http://download.eclipse.org/releases/helios      org.eclipse.tycho tycho-maven-plugin 0.12.0 true   org.apache.maven.plugins maven-dependency-plugin   unpack-dependencies package  unpack-dependencies   ${project.build.directory}/dependency false true      org.apache.maven.plugins maven-assembly-plugin 2.2.1   src/main/assembly/repackaged.xml     make-assembly package  single        

META-INF / MANIFEST.MF中的清单:

 Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Ignored Bundle-SymbolicName: Ignored Bundle-Version: 0.0.1 Require-Bundle: org.eclipse.xsd Bundle-Vendor: Ignored 

src / main / assembly / repackaged.xml中的程序集描述符:

  repackaged  jar  false   ${project.build.directory}/dependency/ / true    

现在mvn包将创建一个jar文件,其中包含来自P2依赖项的所有代码,重新打包为适当的Maven工件,可以在另一个项目中用作依赖项。

 $ jar tf target/org.eclipse.xsd-0.0.1-repackaged.jar org/eclipse/xsd/ecore/XSDEcoreBuilder$1.class org/eclipse/xsd/ecore/XSDEcoreBuilder$2.class org/eclipse/xsd/ecore/XSDEcoreBuilder$Comparator.class org/eclipse/xsd/ecore/XSDEcoreBuilder$EffectiveOccurrence.class org/eclipse/xsd/ecore/XSDEcoreBuilder.class 

另一种方法是使用b3聚合器在符合maven的布局中镜像p2 repo,如下所述:

使用maven:b3从p2消耗emf包

然后可以使用提供的原始jar子。