在常规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子。
- Eclipse不会识别使用Maven创建的Java Web项目
- 如何在Eclipse中配置autoformatting?
- Android – Eclipse项目制作和R文件错误
- Android Java – 如何从URL下载zip文件?
- 在java中加载freemarker模板时出现FileNotFoundException
- 无法在终端中找到XML架构命名空间错误的Spring NamespaceHandler
- Eclipse java断点 – 目的是什么?
- 从eclipse运行Google App时,为什么会出现以下错误?
- 可以将Google模块与Google Plugin for Eclipse一起使用吗?