我们公司使用Maven.我们使用Nexus存储库管理器来存储我们的快照和版本.
目前,我们正在开发基于Eclipse的产品.我们用Tycho来做那件事.
问题如下:在我们基于Eclipse的产品中,我们有许多功能.我们的想法是分别构建每个功能(或功能组)并将它们放在内部p2存储库中.当一个功能需要另一个功能时,我们将目标平台指向必要的内部p2存储库.
目前,我们用Tycho构建应用程序.我们使我们的功能"可部署",因此Tycho生产了一个P2站点target.我们将P2站点推送到我们的服务器,然后运行Eclipse FeaturesAndBundlesPublisher,它将最近构建的功能与P2存储库合并.因此,我们有一个内部P2存储库,其中包含所有必需功能的版本.
我们发现这个过程太麻烦了.是否有像Nexus这样的工具,哪个更方便?
UPD .: 有关Tycho用户列表的讨论
我的Eclipse RCP Maven项目使用Java 8构建得很好,但是在Java 9中失败了:
[INFO] Scanning for projects...
[WARNING] Could not start bundle org.eclipse.equinox.registry
org.osgi.framework.BundleException: Could not resolve module: org.eclipse.equinox.registry [42]
Unresolved requirement: Require-Bundle: org.eclipse.equinox.common; bundle-version="[3.7.0,4.0.0)"
-> Bundle-SymbolicName: org.eclipse.equinox.common; bundle-version="3.8.0.v20160315-1450"; singleton:="true"
org.eclipse.equinox.common [18]
Unresolved requirement: Require-Capability: osgi.ee; filter:="(&(osgi.ee=JavaSE)(version=1.7))"
Unresolved requirement: Import-Package: org.eclipse.core.runtime.jobs; resolution:="optional"
-> Export-Package: org.eclipse.core.runtime.jobs; bundle-symbolic-name="org.eclipse.core.jobs"; bundle-version="3.8.0.v20160209-0147"; version="0.0.0"
org.eclipse.core.jobs [6]
Unresolved requirement: Require-Bundle: org.eclipse.equinox.common; bundle-version="[3.8.0,4.0.0)"
-> Bundle-SymbolicName: org.eclipse.equinox.common; bundle-version="3.8.0.v20160315-1450"; singleton:="true"
at org.eclipse.osgi.container.Module.start(Module.java:434)
at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:392)
at org.eclipse.sisu.equinox.embedder.internal.DefaultEquinoxEmbedder.tryActivateBundle(DefaultEquinoxEmbedder.java:215)
at org.eclipse.sisu.equinox.embedder.internal.DefaultEquinoxEmbedder.activateBundlesInWorkingOrder(DefaultEquinoxEmbedder.java:207)
at org.eclipse.sisu.equinox.embedder.internal.DefaultEquinoxEmbedder.doStart(DefaultEquinoxEmbedder.java:182)
at org.eclipse.sisu.equinox.embedder.internal.DefaultEquinoxEmbedder.start(DefaultEquinoxEmbedder.java:67)
at org.eclipse.sisu.equinox.embedder.internal.DefaultEquinoxEmbedder.checkStarted(DefaultEquinoxEmbedder.java:310)
at org.eclipse.sisu.equinox.embedder.internal.DefaultEquinoxEmbedder.getService(DefaultEquinoxEmbedder.java:286)
at org.eclipse.sisu.equinox.embedder.internal.DefaultEquinoxEmbedder.getService(DefaultEquinoxEmbedder.java:280) …Run Code Online (Sandbox Code Playgroud) 使用Maven开发OSGi应用程序时有两种主要方法:POM-first和MANIFEST first.
我正在寻找一个表格形式的答案,显示每种方法的优缺点.
更具体地说,我也想知道它与以下内容的关系:
我想使用eclipse-plugin打包在Maven中构建一个项目,但是我的POM出现以下错误:
[ERROR] Unknown packaging: eclipse-plugin @ line 15, column 13 .
Run Code Online (Sandbox Code Playgroud)
pom.xml中:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<relativePath>../releng/pom.xml</relativePath>
<groupId>net.sf.logsaw</groupId>
<artifactId>parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>net.sf.logsaw.core</artifactId>
<version>1.0.4-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
<name>LogSaw Core Plugin</name>
</project>
Run Code Online (Sandbox Code Playgroud) 我正在使用类似于此处描述的项目的项目 .所以,它在父pom.xml中有几个模块:
<modules>
<module>../de.vogella.tycho.plugin</module>
<module>../de.vogella.tycho.feature</module>
<module>../de.vogella.tycho.p2updatesite</module>
</modules>
Run Code Online (Sandbox Code Playgroud)
这些模块具有通用版本号,例如1.0.0-SNAPSHOT或不具有-SNAPSHOT.feature.xml文件需要包含相同的版本号:
<feature
id="com.my.feature"
label="My plugin feature"
version="1.0.0">
Run Code Online (Sandbox Code Playgroud)
和:
<plugin
id="com.my.plugin"
download-size="0"
install-size="0"
version="1.0.0"
unpack="false"/>
Run Code Online (Sandbox Code Playgroud)
文件category.xml(在p2更新站点项目中)和MANIFEST.MF(在插件项目中)需要包含相同的值.
问题是:如何使用Maven自动化所有这些文件中的版本号更新过程?
我尝试使用maven-release-plugin和maven-versions-plugin来解决这个问题.第一个插件会产生大量未使用的操作(比如进行大量的CVS提交,我在这个项目中没有使用).第二个插件只对pom.xml文件进行更改,不修改feature.xml,category.xml和MANIFEST.MF,或者我用它不太好.
我正在使用Maven和Tycho构建一个eclipse插件.Tycho通过检查插件的清单文件为Maven生成pom.xml文件.现在清单文件和pom文件都有插件的版本,需要手动保持同步.这是因为我在生成的pom文件中进行了一些自定义,并且每次更改清单中的版本时都无法覆盖它.
我的问题是,有没有办法使用Tycho自动保持这些版本同步?
我正在尝试使用eclipse-repository包装类型中的Tycho和tycho-p2-repository-plugin构建一个p2存储库.当我运行构建时,它给了我以下异常:
无法在项目com.mycompany上执行目标org.eclipse.tycho:tycho-p2-repository-plugin:0.13.0:assemble-repository(default-assemble-repository):没有为p2存储库指定内容
有人能指出我这个问题的原因吗?
我有一堆基于Eclipse的插件,我一直在迁移到Maven/Tycho.大多数这些插件依赖于我现在通过Maven管理的单独库,而不是混淆.jar文件.
我当前设置中最麻烦的部分是由于Tycho明显无法处理仅Maven(即非OSGi)工件.我目前的设置是这样的:
在pom.xml每个Eclipse插件中,我在阶段发出一个unpack目标.这会将我指定的工件解包到一个单独的目录中.maven-dependency-plugininitializetarget/dependencies
该target/dependencies目录作为输出目录添加build.properties,因此Tycho可以在编译时将其添加到类路径中:
source.. = src/main/java/
output.. = target/classes/
output.. = target/dependencies/
Run Code Online (Sandbox Code Playgroud)该target/dependencies目录将添加到Bundle-ClassPath库中META-INF/MANIFEST.MF.
这些设置允许compileMaven指令编译插件.从VCS导入项目并target/dependencies在Eclipse中手动指定目录作为类文件夹允许所述IDE也编译插件.
不幸的是,由于以下几个原因,这是一个相当麻烦的解决方案:
配置maven-dependency-plugin要求列出应解压缩的所有工件.一个可以使用unpack-dependencies的替代unpack,但也将打开所有的OSGi依赖-的Eclipse有一半在每个项目目录解压不是我的乐趣所在......
在Eclipse中添加类文件夹需要initialize运行一次Maven ,以便target/dependencies创建目录.
纯Maven项目与Eclipse中依赖的Tycho项目之间没有源连接.对于从Maven项目传播到Tycho项目的更改,以便例如Eclipse可能显示潜在的编译问题,必须mvn install使用Maven项目然后mvn clean initialize在Tycho项目中运行以删除先前解压缩的依赖项并拉入当前集合.然后你必须刷新Eclipse项目并希望Eclipse做正确的事情.
同样,从Tycho项目查看依赖关系源将不会显示主要源文件,而是显示可用的内容target/dependencies- 很可能只是一个.class文件.
我认为必须有一个更合理的方法来解决这个问题 - 这将允许Eclipse和Maven项目更紧密地集成.
那么,我错过了什么?这个用例的推荐设置是什么?还有更好的选择吗?最好是不需要设置一堆Nexus和/或p2存储库的东西?
我想用目标平台构建一个RCP-Application,这是一个Maven/Tycho目录.
现在我遇到了一些无法解决依赖关系的麻烦.
Internal error: java.lang.RuntimeException: "No solution found because the
problem is unsatisfiable.": ["Unable to satisfy dependency from
de.test.prototype.main 1.0.0.qualifier to bundle org.eclipse.ui 0.0.0.",
"Unable to satisfy dependency from de.test.prototype.main 1.0.0.qualifier
to bundle org.eclipse.core.runtime 0.0.0.", ...
Run Code Online (Sandbox Code Playgroud)
总而言之,有几个依赖性解决问题,所以我认为Tycho不能使用我的目标平台.
我阅读了http://wiki.eclipse.org/Tycho/Target_Platform,其中有以下注释:
不支持位置类型"目录","安装"和"功能"."
所以我的问题是:我如何让Tycho使用我的目标平台,虽然它是一个目录?
使用Nodeclipse Eclipse插件的maven/tycho构建,每个版本都有新的p2存储库.
发布在Bintray上完成,不允许更新文件.所以每个版本都在其文件夹中.
BaseFolder
BaseFolder/VersionFolder1
BaseFolder/VersionFolder2
BaseFolder/VersionFolder3
Run Code Online (Sandbox Code Playgroud)
是否可以BaseFolder准备一次作为可扩展的p2存储库,并VersionFolderN在以后添加?
因此,只有一个用于更新的URL,Eclipse平台可以发现存储库中的更新.
tycho ×10
maven ×9
eclipse ×3
java ×2
osgi ×2
p2 ×2
aggregation ×1
dependencies ×1
eclipse-rcp ×1
java-9 ×1
nexus ×1
release ×1
repository ×1