![](/img/trans.png)
[英]Handling transitive dependencies of non-OSGI dependencies in JBoss Fuse
[英]Handling non-OSGi dependencies when integrating Maven, Tycho and Eclipse
我有一堆基于Eclipse的插件,我一直在迁移到Maven / Tycho。 大多数这些插件依赖于我现在通过Maven管理的单独库,而不是混淆.jar
文件。
我当前设置中最麻烦的部分是由于Tycho显然无法处理仅Maven(即非OSGi)工件。 我目前的设置是这样的:
在每个Eclipse插件的pom.xml
,我在initialize
阶段向maven-dependency-plugin
发出unpack
目标。 这会将我指定的工件解包到单独的target/dependencies
录中。
target/dependencies
目录作为输出目录添加到build.properties
,以便Tycho可以在编译时将其添加到类路径中:
source.. = src/main/java/ output.. = target/classes/ output.. = target/dependencies/
target/dependencies
目录被添加到META-INF/MANIFEST.MF
的Bundle-ClassPath
库中。
这些设置允许compile
Maven指令来编译插件。 从VCS导入项目并在Eclipse中手动指定target/dependencies
项目录作为类文件夹允许所述IDE也编译插件。
不幸的是,由于以下几个原因,这是一个相当麻烦的解决方案:
配置maven-dependency-plugin
需要列出应该解压缩的所有工件。 可以使用unpack-dependencies
而不是unpack
,但这也会解压所有OSGi依赖项 - 在每个项目目录中解压缩一半Eclipse并不是我的乐趣......
在Eclipse中添加类文件夹要求Maven initialize
运行一次,以便创建target/dependencies
录。
纯Maven项目与Eclipse中依赖的Tycho项目之间没有源连接。 对于从Maven项目传播到Tycho项目的更改,以便例如Eclipse可能显示潜在的编译问题,必须mvn install
Maven项目然后在Tycho项目中运行mvn clean initialize
以删除先前解压缩的依赖项和拉入当前设定。 然后你必须刷新Eclipse项目并希望Eclipse做正确的事情。
同样,从Tycho项目查看依赖关系源将不会显示主要源文件,而是显示target/dependencies
可用的任何内容 - 很可能只是一个.class
文件。
我认为必须有一个更合理的方法来解决这个问题 - 这将允许Eclipse和Maven项目更紧密地集成。
那么,我错过了什么? 这个用例的推荐设置是什么? 还有更好的选择吗? 最好是不需要设置一堆Nexus和/或p2存储库的东西?
我们似乎采用了类似的策略。 但是,我使用nexus混合存储库(同时具有maven和p2)。
<plugin>
<!-- Copy non-Ecipse plugins to target/dependency so that may be referenced
for runtime use. -->
<artifactId>maven-dependency-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<excludeGroupIds>org.XXX</excludeGroupIds>
</configuration>
</execution>
<execution>
<id>classpath</id>
<goals>
<goal>build-classpath</goal>
</goals>
<configuration>
<fileSeparator>/</fileSeparator>
<prefix>target/dependency</prefix>
<outputFile>${project.build.directory}/classPath.txt
</outputFile>
</configuration>
</execution>
</executions>
</plugin>
bin.includes = META-INF/,
target/classes/,
plugin.xml,
target/dependency/mongo-java-driver-2.11.3.jar
Bundle-ClassPath: .,
target/classes/,
target/dependency/mongo-java-driver-2.11.3.jar
您可以使用Embed-Dependency尝试maven-bundle-plugin。
见http://wiki.eclipse.org/Tycho/How_Tos/Dependency_on_pom-first_artifacts
官方演示效果很好。 但是,我仍然没有以这种方式使用我的jar文件。
官方演示确实运行良好,并显示嵌入非OSGI依赖项的方式,或者换句话说,为其他依赖项创建OSGI外观。
方法确实是手动复制依赖项,使它们成为OSGI清单的一部分并导出感兴趣的包。
然而,真正的问题是从Eclipse中执行依赖插件。
即使使用相应的M2E连接器也无法运行,从而阻止了发现和PDE类路径分辨率。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.