![](/img/trans.png)
[英]Android/PhoneGap: Using third-party libraries in plugin-development
[英]Using third-party libraries in Eclipse RCP Tycho app
我根据vogella广泛的Tycho教程创建了一个锅炉板项目。
事实:
问题:
我不知道在哪个pom.xml
包含第三方依赖项。
我不能将它们包含在RCP项目中,因为那个pom的包装是eclipse-plugin
,而不是jar
。 根据我的注意,如果我将包装更改为jar
,则会自动添加“Maven Dependencies”库。 如果我改回eclipse-plugin
,它们就会被删除。
问题:
jar
包装的pom。 相关解决方案
我认为你有一个根本的误解。
Maven :Maven通过pom.xml确定所有项目依赖项并自动解决传递依赖项(假设所有pom文件和工件存在于已配置并正确声明其依赖项的存储库中)。
Tycho :问题是Eclipse已经有自己的项目模型,它基于产品文件,feature.xml文件和插件MANIFEST.MF文件。 Tycho利用Eclipse的Maven机制,但想法是pom.xml文件只配置Maven插件并声明打包类型。 这为Maven提供了一个切入点,但是Tycho接管了。 虽然Maven通常会根据pom.xml文件中的信息构建依赖关系链,但Tycho正在根据产品,功能和MANIFEST.MF文件中的信息构建依赖关系更改。 您没有在pom.xml文件中放置任何依赖项。 Tycho还使用Eclipse p2存储库(而不是普通的Maven存储库)来查找本地模块或目标平台中找不到的相关插件。
这对许多Eclipse开发人员来说实际上是一个好处,因为他们已经在Eclipse插件,功能和产品中正确设置了所有内容。 他们不希望重复pom.xml中的所有依赖项。
在Eclipse插件中使用库 :在Eclipse中,如果要使用尚未打包为Eclipse插件的库,则可以使用几个选项。 您的插件可以在libs文件夹中包含一组JAR,然后在插件和运行时类路径中包含该libs文件夹(请参阅build.properties文件)。 另一种选择是创建自己的“库插件”,将JAR库重新打包为Eclipse插件。 另请参见https://wiki.eclipse.org/FAQ_What_is_the_classpath_of_a_plug-in%3F 。 这就是你获得的答案。
问题是,如果您尝试包含一个复杂的库,其中包含多个JAR,这些JAR通常是通过Maven分发并包含在标准Java项目中。 我们在项目中使用Jersey JAX-RS实现了这个问题。 没有p2存储库包含所有库作为具有正确依赖关系信息的插件。
简单的解决方案 :如果您需要一个公共库,请首先检查Orbit项目,看看这些库是否已经打包为Eclipse插件, http://www.eclipse.org/orbit/ 。 在这种情况下,您可以下载它们并将它们包含在目标平台中,或者您可以在(Tycho)构建时从它们的p2存储库动态提取它们。 您的插件只包含这些插件作为依赖项(在他们的MANIFEST.MF文件中)。
变通方法/解决方案 :在我们的案例中,Jersey JAX-RS不能作为Eclipse插件使用,它有一堆传递依赖项。 解决方法是创建一个Eclipse“库插件”,就像我上面提到的两个pom文件一样。 我们最初创建了一个带有空 libs文件夹的框架插件。 一个pom文件只是一个带有<packaging>jar</packaging>
的标准Maven pom文件,它声明了引入Jersey JAX-RS实现及其所有依赖项所需的顶级依赖项。 依赖项使用<scope>compile</scope>
。 我们使用maven-dependency-plugin将所有这些依赖项复制到项目的libs文件夹中。
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>compile</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>libs</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
实际上,我们不时用手工运行Maven来更新lib,然后我们只是检查插件及其所有依赖的JAR到源代码控制中。
稍后检查构建,我发现在我们启动构建的Maven / Tycho部分之前,我们实际上在Maven中使用单独的构建任务实时填充了libs文件夹。 当然,插件的MANIFEST-MF文件的Bundle-ClassPath和Export-Package条目直接来自源代码控制。 我们必须不时检查这些,以确保它们与我们从Maven获得的库和包匹配。 (除非我们碰到主要的库版本或在Maven级别添加新的依赖项,否则这种情况不会发生太大变化。)插件的build.properties将libs /文件夹作为bin.includes的一部分。
在开发环境中,在我们首先检查代码之后,我们只需在项目的“复制依赖关系”pom文件中运行mvn(带有项目的外部工具启动配置)。 这将使用所有JAX-RS库和依赖项填充libs文件夹。 当我们更新有关依赖项的内容时,或者当我们在具有不同版本的JAX-RS依赖项的分支之间跳转时,我们只需要再次运行它。 我们设置.gitignore以确保我们不将lib提交给Git。
这个项目的另一个pom就像一个带有<packaging>eclipse-plugin</packaging>
的普通Tycho pom文件一样。 在我们的自动构建期间,我们在构建过程的早期(在签出后)运行一步,使用jar pom调用mvn来填充库。 然后我们使用eclipse-plugin pom继续进行主Maven / Tycho构建。 eclipse-plugin pom没有依赖信息(正如我上面所说)。 它只是为Tycho提供了一种识别Eclipse插件的方法,并根据其MANIFEST.MF和build.properties文件构建它。 但是内置的插件包含并公开了所有那些由mvn调用jar pom步骤填充的库。
所以,这有点乱,但这是几年前我们遇到这个问题时找到的最佳解决方案。 我不确定Tycho是否正在做任何工作以允许某种混合Maven / Tycho构建,它可以自动执行此操作作为构建的一部分。 我想我应该问开发者。 :)
你的问题 :
<packaging>jar</packaging>
模块。 我发现这样做的唯一方法是使用类似的解决方法。 首先构建JAR模块,将其安装到maven存储库中,然后让其中一个插件项目将JAR捆绑到其libs文件夹中。 (如果你真的想这样做,请问。我们有一个案例,我们也必须这样做,我可以提供我们在开发和构建中所做的步骤,使其工作。我认为单个项目的解决方法我上面提到的对你的案子更有意义。) 简介 :基本问题是Eclipse插件无法“看到”裸JAR库。 插件需要将库包含在其本地libs文件夹中(在MANIFEST.MF中具有匹配的Bundle-ClassPath条目),或者它需要依赖于导出相应包的其他插件。 Tycho只是通过Eclipse插件解决了依赖关系,它无法直接利用普通的Maven依赖解析来引入一堆JAR。 如果所有依赖项都已经插件,那么你没问题。 如果没有,您可能必须使用上面的解决方法来为您的插件打包一组库以供使用。
只需将插件添加到pom依赖项中,并在target-platform-configuration
的配置中包含条目<pomDependencies>consider</pomDependencies>
,即可使用它。
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<version>${tycho.version}</version>
<configuration>
<!-- The configuration to make tycho consider the maven dependencies -->
<pomDependencies>consider</pomDependencies>
<!-- other configurations -->
</configuartion>
</plugin>
<!-- other plugins-->
</plugins>
<dependencies>
<!-- An example third-party bundle (plugin) present in maven repository-->
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.gogo.shell</artifactId>
<version>1.1.0</version>
</dependency>
</dependencies>
参考链接在这里 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.