好像我在回答另一个自己的问题..
首先,您可以使用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存储库成功解决。不幸的是,我们还没有完成。依赖项已添加到系统范围中,这意味着如果我们创建依赖于构建的Web应用程序,则不会包含工件。要解决此问题,我们首先将依赖项中包含的所有类解压缩到某个目录,然后将该目录重新打包为jar并将其用作构建的最终产物。
对于第一部分(解包),我们将maven-dependency-
plugin添加到我们的构建中,并将其配置为在打包阶段运行其解包依赖性目标。对于第二部分(重新打包),我们将maven-assembly-
plugin添加到我们的构建中,并将其配置为在打包阶段运行其单个目标。我们还需要创建和配置自定义程序集描述符。
现在,我们的构建包含3个文件:pom.xml中的构建文件:
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>org.eclipse.xsd</artifactId> <version>0.0.1</version> <packaging>eclipse-plugin</packaging> <repositories> <repository> <id>helios</id> <layout>p2</layout> <url>http://download.eclipse.org/releases/helios</url> </repository> </repositories> <build> <plugins> <plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>tycho-maven-plugin</artifactId> <version>0.12.0</version> <extensions>true</extensions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>unpack-dependencies</id> <phase>package</phase> <goals> <goal>unpack-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/dependency</outputDirectory> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>true</overWriteSnapshots> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.2.1</version> <configuration> <descriptors> <descriptor>src/main/assembly/repackaged.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build></project>meta-INF / MANIFEST.MF中的清单:
Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-Name: IgnoredBundle-SymbolicName: IgnoredBundle-Version: 0.0.1Require-Bundle: org.eclipse.xsdBundle-Vendor: Ignored
src / main / assembly / repackaged.xml中的程序集描述符:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> <id>repackaged</id> <formats> <format>jar</format> </formats> <includebaseDirectory>false</includebaseDirectory> <fileSets> <fileSet> <directory>${project.build.directory}/dependency/</directory> <outputDirectory>/</outputDirectory> <useDefaultExcludes>true</useDefaultExcludes> </fileSet> </fileSets></assembly>现在,mvn软件包将创建一个jar文件,其中包含来自我们P2依赖项的所有代码,并将其重新打包为适当的Maven工件,准备在另一个项目中用作依赖项。
$ jar tf target/org.eclipse.xsd-0.0.1-repackaged.jar org/eclipse/xsd/ecore/XSDEcoreBuilder$1.classorg/eclipse/xsd/ecore/XSDEcoreBuilder$2.classorg/eclipse/xsd/ecore/XSDEcoreBuilder$Comparator.classorg/eclipse/xsd/ecore/XSDEcoreBuilder$EffectiveOccurrence.classorg/eclipse/xsd/ecore/XSDEcoreBuilder.class



