编程语言
首页 > 编程语言> > java – 在集成Maven,Tycho和Eclipse时处理非OSGi依赖项

java – 在集成Maven,Tycho和Eclipse时处理非OSGi依赖项

作者:互联网

我有一堆基于Eclipse的插件,我一直在迁移到Maven / Tycho.大多数这些插件依赖于我现在通过Maven管理的单独库,而不是混淆.jar文件.

我当前设置中最麻烦的部分是由于Tycho明显无法处理仅Maven(即非OSGi)伪像.我目前的设置是这样的:

>在每个Eclipse插件的pom.xml中,我在初始化阶段向maven-dependency-plugin发出解包目标.这会将我指定的工件解包到单独的目标/依赖项目录中.
> target / dependencies目录被添加为build.properties中的输出目录,以便Tycho可以在编译时将其添加到类路径:

source.. = src/main/java/
output.. = target/classes/
output.. = target/dependencies/

> target / dependencies目录被添加到META-INF / MANIFEST.MF中的Bundle-ClassPath库中.

这些设置允许编译Maven指令来编译插件.从VCS导入项目并在Eclipse中手动指定目标/依赖项目录作为类文件夹允许所述IDE也编译插件.

不幸的是,由于以下几个原因,这是一个相当麻烦的解决方案:

>配置maven-dependency-plugin需要列出应该解压缩的所有工件.可以使用unpack-dependencies而不是unpack,但这也会解压所有OSGi依赖项 – 在每个项目目录中解压缩一半Eclipse并不是我的乐趣……
>在Eclipse中添加类文件夹要求Maven初始化运行一次,以便创建目标/依赖项目录.
>纯Maven项目与Eclipse中依赖Tycho项目之间没有源连接.对于从Maven项目传播到Tycho项目的更改,以便例如Eclipse可能会显示潜在的编译问题,必须安装Maven项目然后在Tycho项目中运行mvn clean initialize以删除以前解压缩的依赖项并拉入当前集合.然后你必须刷新Eclipse项目并希望Eclipse做正确的事情.

同样,从Tycho项目查看依赖关系源将不会显示主要源文件,而是显示目标/依赖项中可用的任何内容 – 很可能只是一个.class文件.

我认为必须有一个更合理的方法来解决这个问题 – 这将允许Eclipse和Maven项目更紧密地集成.

那么,我错过了什么?这个用例的推荐设置是什么?还有更好的选择吗?最好是不需要设置一堆Nexus和/或p2存储库的东西?

解决方法:

我们似乎采用了类似的策略.但是,我使用nexus混合存储库(同时具有maven和p2).

>对于解包依赖项,我使用maven-dependency-plugin将它们放在目标/依赖项中(见下文).

> 1.1. copy-dependencies可以在不解包的情况下完成所需的操作.

>您的来源和输出与我的大致相同.

> 2.1.是的,mvn必须初始化目标/依赖项

>我只在MANIFEST中包含所需的罐子,因为1会检索许多不必要的罐子.

> 3.1.我手动选择相关的罐子.
> 3.2.是的,如果非Eclipse管理(maven)项目发生更改(在工作区之外),则必须运行mvn build来更新它们.
> 3.3.使这项工作的关键是:

> 3.3.1将maven和Eclipse项目部署到(快照)存储库.我用http://www.sonatype.org/nexus/.因此,当您运行maven时,它会查看nexus存储库以获取maven和Eclipse项目的更新.

>其他一些注释,可能已经很明显了:

> 4.1. pom.xml文件应该只包含非Eclipse jar作为依赖项. (tycho插件处理所有Eclipse依赖项,应该在您的(nexus)存储库中找到它.)
> 4.2.将依赖jar添加到Eclipse中的运行时(通过编辑plugin.xml运行时)

Maven插件:

        <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>

示例build.properties

bin.includes = META-INF/,
target/classes/,
plugin.xml,
target/dependency/mongo-java-driver-2.11.3.jar

示例清单(仅限jar的子集):

Bundle-ClassPath: .,
target/classes/,
target/dependency/mongo-java-driver-2.11.3.jar

标签:tycho,java,maven,eclipse,dependencies
来源: https://codeday.me/bug/20190928/1828580.html