我有一堆基于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指令编译插件。从版本控制系统导入项目并在Eclipse中手动指定target/dependencies
目录作为类文件夹,也允许该IDE编译插件。
不幸的是,这是一个相当繁琐的解决方案,原因如下:
配置
maven-dependency-plugin
需要列出应解压缩的所有工件。人们可以使用unpack-dependencies
而不是unpack
,但这也会解压缩所有OSGi依赖项-让每个项目目录中都有Eclipse的一半是不好玩的...在Eclipse中添加类文件夹需要运行Maven
initialize
一次,以创建target/dependencies
目录。纯Maven项目与其相关的Tycho项目之间没有源连接。要使更改从Maven项目传播到Tycho项目,以便例如Eclipse显示潜在的编译问题,必须在Tycho项目中运行
mvn clean initialize
去除以前解压缩的依赖项并拉入当前设置, 然后您必须刷新Eclipse项目并希望Eclipse做正确的事情。同样,从Tycho项目查看依赖项的源不会显示主要源文件,而是显示
target/dependencies
中可用的任何内容-很可能只是一个.class
文件。
我认为一定有一个更合理的方法来处理这个问题-一些允许Eclipse和Maven项目更紧密集成的方法。
那么,我缺少什么?对于这种用例,推荐的设置是什么?是否有更好的替代方法?最好不需要设置一堆Nexus和/或p2存储库吗?