如何使用Eclipse P2存储库和Maven tycho-p2-plugin构建SWT应用程序?
我正在使用maven和tyhco编译和构建我的eclipse插件并创建一个p2存储库.
但是,当我安装我的插件时,eclipse会显示不受信任内容的警告.我知道要解决这个问题,我必须签署我分发的插件.
但是,我不知道是否有办法签署我正在用tycho构建的插件...
(我不是maven和jar签名的专家,所以请原谅我这个愚蠢的问题!)
我尝试Eclipse Indigo RCP使用Maven和编译应用程序Tycho.如果我只为一个平台构建它,它工作正常,但如果我尝试构建它更多,构建停止工作.
问题是我在我想要构建的产品文件中有特定于平台的插件.依赖性,例如org.eclipse.swt.win32.win32.x86片段插件org.eclipse.swt.
当我没有向我的产品添加特定于平台的片段时,应用程序将无法启动,因为没有像org.eclipse.swt.win32.win32.x86这样的平台库.作为Tycho存储库,我们使用托管在我们自己的服务器上的eclipse indigo更新站点的克隆.它包括delta-pack.当我为所有平台添加所有片段时,构建崩溃并且maven告诉我平台过滤器与Linux构建不匹配.
有谁知道如何解决这一问题?
我应该将这些平台相关的东西添加到我的产品中吗 我更喜欢将特定的依赖项保留在我的产品之外,对吗?
我尝试在我的 Eclipe-RCP 应用程序中使用我的旧代码。我使用了所有带有依赖项的旧 maven 项目,并使用 maven-bundle-plugin 创建了一个 osgi 包。
现在我把所有东西都装在一个新的 osgi jar 中。
如何从此 osgi jar 创建 p2 更新站点以与 tycho 和 eclipse 目标平台一起使用?
我试过:https : //docs.sonatype.org/display/TYCHO/How+to+make+existing+OSGi+bundles+consumable+by+Tycho
如果我将生成的文件放在 Web 服务器上,eclipse 不会将其识别为“软件站点”。
如何在不使用 Eclipse UI 的情况下从现有的 osgi 包创建 p2 软件站点,该过程必须在我的构建服务器的后台运行。
有没有办法使用 Maven (Tycho)/Gradle 从现有的 osgi 包自动创建 p2 更新站点?
我正在寻找测试一组eclipse插件的可能性,而不必为每个经过测试的插件使用单个bundle.目前我有一个运行Eclipse产品的PDE版本(大约70个插件,功能和产品).所有插件的所有单元测试都包含在一个普通java项目中,具有对所有插件的Eclipse项目引用,以便能够实例化类并运行测试.由于普通java项目错过了所有目标平台项目,因此我将PDE构建转换为maven tycho时,此设置不再有效.我没有执行真正的OSGI插件测试,但是有些测试要求在类路径中包含IProgressMonitor等核心eclipse类,因为我在自己的方法签名中也使用了这些eclipse运行时接口.
在成功设置新的maven tycho构建之后,我尝试了一些可能性让测试再次运行:
1)将plain-java测试项目转换为插件测试项目
缺点:
- 为了能够在内部包中测试类,我必须使用x-friend:notation导出每个包,并且必须为每个包重复此过程新的测试包
2)在每个插件中添加第二个源文件夹并将测试移动到相应的插件中
缺点:
- Tycho似乎使用build.properties来包含编译步骤所需的源文件夹.由于src/main/java和src/test/java都需要注册为源文件夹,因此真实类和测试类在target/classes输出文件夹中混合,最后包含在插件的JAR文件中.我没有找到一种方法来配置tycho以使用src/main/java作为sourceDirectory和src/test/java作为testSourceDirectory.
- Tycho只执行单元测试,如果包类型是"eclipse-test-plugin"
- Sonar似乎不认识以这种方式执行的测试(我没有花很多时间试图解决这个问题,也许有一个这方面的简单解决方案)
3)将必要的eclipse目标平台插件作为普通的maven依赖添加到plain-java测试项目中
缺点:
- 目标平台信息被复制,一次在目标平台中用于tycho构建,一次在maven依赖列表中测试项目(使用普通的maven-surefire执行)
- 目标平台包在工件中部署两次,一次作为目标平台p2存档,一次作为maven依赖项(插件+ POM)
4)为每个插件添加一个测试片段(这似乎是通常选择的可能性)
缺点:
- 需要付出巨大努力(> 70个插件,> 4500个单元测试),所以我需要添加大约70个新片段并拆分所有测试.
目前,可能性3)对我来说似乎最合理......有什么建议吗?otherideas?
我尝试使用来自两个存储库的OSGI依赖关系创建一个eclipse插件,其中一个具有maven依赖关系,而另一个具有p2依赖关系:
<repositories>
<repository>
<snapshots>
<enabled>true</enabled>
</snapshots>
<id>bintray-anrgenstar-genstar-packages</id>
<name>bintray</name>
<url>http://dl.bintray.com/anrgenstar/genstar-packages</url>
</repository>
</repositories>
<repository>
<id>gama</id>
<name>GAMA Snapshots</name>
<url>http://gama.unthinkingdepths.fr</url>
<layout>p2</layout>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
Run Code Online (Sandbox Code Playgroud)
该项目包含一个父pom.xml ummisco.gaml.extensions.parent,用于构建eclipse插件ummisco.gaml.extensions.genstar:
(1)ummisco.gaml.extensions.genstar父级pom.xml定义<module>../ummisco.gaml.extensions.genstar</module>要构建的模块 并调用Tycho maven插件:
<modelVersion>4.0.0</modelVersion>
<groupId>ummisco.gaml.extensions</groupId>
<artifactId>ummisco.gaml.extensions.parent</artifactId>
<version>1.7.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>../ummisco.gaml.extensions.genstar</module>
</modules>
<properties>
<p2-maven.version>1.2.0-SNAPSHOT</p2-maven.version>
<tycho.version>0.26.0</tycho.version>
<project.version>1.7.0-SNAPSHOT</project.version>
</properties>
<repositories>
<repository>
<id>sonatype-nexus-snapshots</id>
<name>Sonatype Nexus Snapshots</name>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository> …Run Code Online (Sandbox Code Playgroud) 我将Eclipse RCP产品的构建从PDE-build转换为Maven Tycho.除了主要(品牌)启动器可执行文件之外,该产品现在还包含"eclipsec.exe"文件.我们想从我们的产品中省略这个基于控制台的启动器,因为它可能会让我们的客户感到困惑.Tycho有办法做到这一点吗?
是否可以为每个maven子项目使用相同的.target文件?
来自父.pom文件的代码段
<groupId>root.server</groupId>
<artifactId>root.server</artifactId>
Run Code Online (Sandbox Code Playgroud)
来自子.pom文件的片段
<groupId>child.project</groupId>
<artifactId>child.project.parent</artifactId>
<target>
<artifact>
<groupId>root.server</groupId>
<artifactId>root.server</artifactId>
<version>${project.version}</version>
<classifier>targetfile</classifier>
</artifact>
</target>
Run Code Online (Sandbox Code Playgroud)
当我在子项目中尝试"mvn clean install"时,我得到一个例外:Could not resolve target platform specification artifact.当我在子项目的父项中尝试"mvn clean install"时,一切正常.
有没有办法为所有项目(父+子项目)重用一个.target文件?
我有一个eclipse RCP应用程序.我一直在尝试使用tycho为Windows生成带有可执行文件的zip.我能够成功构建eclipse-plugin项目,但在发布产品时出现错误:
"包含元素org.eclipse.swt.win32.win32.x86_64.source 0.0.0缺失.无法确定对此元素的要求的过滤器."
我在C:\ eclipse\plugins中检查了我的插件文件夹,我看到我有一个org.eclipse.swt.win32.win32.x86_64.source_3.103.1.v20140903-1947.我不知道tycho从哪个版本获得0.0.0版本?
我跟着http://git.eclipse.org/c/tycho/org.eclipse.tycho-demo.git/tree/itp04-rcp写了POM,因为我的项目结构非常相似,只是我有eclipse插件而不是功能.谢谢.
我继承了使用Maven Tycho构建的大型Eclipse插件代码库。完整版本会为插件生成一个更新站点。
我已经通过运行一个测试实例并指定要加载的插件来成功测试了该插件,但是现在我试图从本地构建的更新站点“正常”安装该插件。在更新站点条目中,我在更新站点目标文件夹中指定了zip文件的路径。它能够显示更新站点中存在的功能列表(仅一个)。我检查了一下,然后继续。它已超出许可证的批准并开始安装,但随后失败:
org.eclipse.equinox.internal.p2.engine.phases.CheckTrust阶段发生错误。会话上下文是:(profile = _home_opnfv_eclipse_java-neon_eclipse,phase = org.eclipse.equinox.internal.p2.engine.phases.CheckTrust,操作数=,操作=)。读取签名内容时出错。打开zip文件时出错
在.metadata / .log文件中,具有以下不足为奇的堆栈跟踪(摘录):
!ENTRY org.eclipse.equinox.p2.engine 4 4 2016-02-10 18:22:49.495
!MESSAGE An error occurred during the org.eclipse.equinox.internal.p2.engine.phases.CheckTrust phase.
!SUBENTRY 1 org.eclipse.equinox.p2.engine 4 0 2016-02-10 18:22:49.495
!MESSAGE session context was:(profile=_home_opnfv_eclipse_java-neon_eclipse, phase=org.eclipse.equinox.internal.p2.engine.phases.CheckTrust, operand=, action=).
!SUBENTRY 1 org.eclipse.equinox.p2.engine 4 0 2016-02-10 18:22:49.495
!MESSAGE Error reading signed content.
!STACK 0
java.util.zip.ZipException: error in opening zip file
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:219)
at java.util.zip.ZipFile.<init>(ZipFile.java:149)
at java.util.zip.ZipFile.<init>(ZipFile.java:163)
at org.eclipse.osgi.internal.signedcontent.SignedBundleHook.getSignedContent(SignedBundleHook.java:209)
at org.eclipse.equinox.internal.p2.engine.phases.CertificateChecker.checkCertificates(CertificateChecker.java:73)
Run Code Online (Sandbox Code Playgroud)
在寻找这种情况的其他情况时,我发现了似乎与此有关的各种问题,但没有什么具体的。我发现一些人用未经证实的建议删除Eclipse发行版中的所有“ artifacts.xml”文件。由于没有其他建议,我尝试了一下(先将它们保存在tar文件中),然后重新启动Eclipse,然后重新安装,但这没有任何效果。
我无法告诉WHICH压缩文件正在抱怨。我想这不是主要的更新站点zip。我查看了“目标/存储库”中存在的所有jar文件,但没有一个被签名。我不清楚他们应该是。据我所知,此应用程序的构建过程应产生一个有效的更新站点。
我还能提供什么其他信息来说明这一点?
更新:
我尝试通过在Eclipse中创建更新站点条目时选择“本地”而不是“存档”,从等式中删除一个zip文件,并且我选择了“目标/存储库”,而不是选择“ target …