GGr*_*rec 12 java eclipse-plugin eclipse-rcp tycho maven
我根据vogella广泛的Tycho教程创建了一个锅炉板项目.
事实:
问题:
我不知道在哪些内容中pom.xml包含第三方依赖项.
我不能将它们包含在RCP项目中,因为那个pom的包装是eclipse-plugin,而不是jar.根据我的注意,如果我将包装更改为jar,则会自动添加"Maven Dependencies"库.如果我改回去eclipse-plugin,他们会被删除.
问题:
jar我的项目中没有包装包装.相关解决方案
Tom*_*yan 17
我认为你有一个根本的误解.
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文件只是一个标准的Maven pom文件,<packaging>jar</packaging>它声明了引入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>
Run Code Online (Sandbox Code Playgroud)
实际上,我们不时用手工运行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设置为普通的Tycho pom文件<packaging>eclipse-plugin</packaging>.在我们的自动构建期间,我们在构建过程的早期(在签出后)运行一步,使用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.如果所有依赖项都已经插件,那么你没问题.如果没有,您可能必须使用上面的解决方法来为您的插件打包一组库以供使用.
| 归档时间: |
|
| 查看次数: |
1674 次 |
| 最近记录: |