我想用目标平台构建一个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使用我的目标平台,虽然它是一个目录?
在过去,我们在文件系统上有我们的捆绑和功能,并通过具有"目录"位置的目标定义文件在Eclipse中提供它们.通过这种方式,可以很容易地将它们与Eclipse中的Export向导一起使用.
现在我正在尝试构建一个eclipse-plugin具有第三方依赖关系的Tycho,例如javax.vecmath和org.apache.commons.math.
据我所知,在Tycho构建中获取依赖关系的最佳方法是通过p2存储库.所以我正在使用Eclipse捆绑包.但对于我的第三方软件包,似乎没有可用的p2存储库.
所以我的问题是:如何轻松地将JAR(vecmath,commons-math)放入p2存储库?
我以为我可以用Tycho构建一个p2存储库,但是当我无法访问第谷的第三方软件包时如何做到这一点?我尝试使用目标定义,但Tycho仅支持到p2存储库的链接,而不支持目录或安装.那么有没有其他方法可以在Maven/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平台可以发现存储库中的更新.
我正在尝试从部署在远程Maven存储库中的Tycho功能工件构建p2存储库,而不必首先将工件安装到本地Maven存储库中(因为Tycho无法解析从产品到eclipse功能的引用)不同的反应堆构建),而无需在单个反应堆构建中一起构建所有功能和存储库.
背景
我有一个多模块Tycho项目,它构建了几个Eclipse插件和功能.
因此,我可以单独构建每个模块 - 以便我可以在我们的Nexus Maven存储库中引用OSGI工件 - 我已<pomDependencies>consider</pomDependencies>在我的目标平台中启用,并在模块之间添加Maven依赖项或像往常一样使用<dependency/>元素添加到存储库工件.
这很好用 - 我可以构建功能或运行插件测试,而不需要它们的相关插件在我的本地Maven存储库或同一个反应器构建中.例如,当我mvn test在插件测试项目上运行时,相关的依赖项将从Nexus下载,Tycho将很乐意解决Import-Package我的清单中的s,构建所有内容并运行测试.到现在为止还挺好.
我想从这些功能生成一个p2存储库,以便我可以从更新站点在Eclipse中安装它们,并且广告的方式是使用eclipse-repository打包类型.但是这里的计划失败了 - 在构建存储库时,Tycho似乎无法解决功能依赖关系,因为它可以在构建功能时解决插件依赖关系.所有尝试都产生:
[ERROR] Cannot resolve project dependencies:
[ERROR] Software being installed: my.eclipse.repository raw:0.0.1.'SNAPSHOT'/format(n[.n=0;[.n=0;[-S]]]):0.0.1-SNAPSHOT
[ERROR] Missing requirement: my.eclipse.repository raw:0.0.1.'SNAPSHOT'/format(n[.n=0;[.n=0;[-S]]]):0.0.1-SNAPSHOT requires 'my.prj.eclipse.project.feature.feature.group 0.0.0' but it could not be found
Run Code Online (Sandbox Code Playgroud)
我成功构建p2存储库有两种方法:
eclipse-repository在Tycho多模块项目中创建一个模块,并使用例如一次构建整个项目mvn verify,则功能可以很好地解决.但我不想这样做.我更愿意单独构建模块.这意味着我们的CI可以为每个模块提供一个指标,我们可以立即看到哪些模块测试失败了; 它为我们提供了并行构建的机会; 并且我们避免必须在未更改的模块上不断运行构建.不得不使用单片Maven构建将是一种耻辱.mvn install依赖项将Tycho项目安装到我的本地Maven存储库中.但我也不想这样做,因为这意味着构建本质上是不可再生的,因为它会对本地存储库的状态敏感.我们的CI目前设置为每个作业维护一个Maven存储库,并在执行开始时完全擦除它,以保护我们免受这种潜在的混乱.所以我的问题是:还有第三种方式吗?有什么方法可以让Tycho插件负责构建eclipse-repository包装类型以从远程Maven存储库下载功能吗?或者我可以从单独构建并部署到Maven存储库的插件构建p2存储库的任何其他方式?
我尝试过的事情包括:
jar和eclipse-feature明确地将功能添加到目标平台,例如
... …
我根据vogella广泛的Tycho教程创建了一个锅炉板项目.
事实:
问题:
我不知道在哪些内容中pom.xml包含第三方依赖项.
我不能将它们包含在RCP项目中,因为那个pom的包装是eclipse-plugin,而不是jar.根据我的注意,如果我将包装更改为jar,则会自动添加"Maven Dependencies"库.如果我改回去eclipse-plugin,他们会被删除.
问题:
jar我的项目中没有包装包装.相关解决方案
我正在使用tycho自动构建我的RCP应用程序(实际上,我采用了其中一个示例中报告的结构).我不得不说它工作得很好,我能够支持我需要的所有三种架构(linux x86,linux x86_64,win32 x86).
此外,部分应用程序需要一些本机代码,我提供了片段(请参阅我之前的问题).每个片段都针对特定体系结构进行了定制,因此在片段的MANIFEST中指定它:
Eclipse-PlatformFilter: (& (osgi.os=linux) (osgi.arch=x86_64))
Run Code Online (Sandbox Code Playgroud)
但是,如果我跑,mvn install我获得:
[ERROR] Internal error: java.lang.RuntimeException: "Problems resolving provisioning plan.": ["tycho.jni.linux 1.0.0.qualifier cannot be installed in this environment because its filter is not applicable."] -> [Help 1]
org.apache.maven.InternalErrorException: Internal error: java.lang.RuntimeException: "Problems resolving provisioning plan.": ["tycho.jni.linux 1.0.0.qualifier cannot be installed in this environment because its filter is not applicable."]
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:168)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at …Run Code Online (Sandbox Code Playgroud) 我用eclipse-plugin包装创建了一个Tycho项目.该项目包含一些通过pom.xml指定的依赖项.相关的pom部分是:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<tycho.version>0.15.0</tycho.version>
</properties>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-maven-plugin</artifactId>
<version>${tycho.version}</version>
<extensions>true</extensions>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<version>${tycho.version}</version>
<configuration>
<pomDependencies>consider</pomDependencies>
<environments>
<environment>
<os>win32</os>
<ws>win32</ws>
<arch>x86</arch>
</environment>
<environment>
<os>linux</os>
<ws>gtk</ws>
<arch>x86_64</arch>
</environment>
<environment>
<os>macosx</os>
<ws>cocoa</ws>
<arch>x86_64</arch>
</environment>
</environments>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>juno</id>
<layout>p2</layout>
<url>http://download.eclipse.org/releases/juno</url>
</repository>
<repository>
<id>com.springsource.repository.bundles.release</id>
<name>SpringSource Enterprise Bundle Repository - SpringSource Bundle Releases</name>
<url>http://repository.springsource.com/maven/bundles/release</url>
</repository>
<repository>
<id>com.springsource.repository.bundles.external</id>
<name>SpringSource Enterprise Bundle Repository - External Bundle Releases</name>
<url>http://repository.springsource.com/maven/bundles/external</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>com.springsource.org.testng</artifactId>
<version>6.4.0</version>
</dependency> …Run Code Online (Sandbox Code Playgroud) 我有一个osgi项目,分为3个存储库.每个存储库都有自己的构建到使用Tycho的p2存储库:
Repo1 -> P2 repo 1
Repo2 -> P2 repo 2
Repo3 -> P2 repo 3
Run Code Online (Sandbox Code Playgroud)
此外,每个存储库都有一个目标定义文件,其中包含来自第三方p2存储库和另一个项目存储库的捆绑包(上面的P2 repo1,P2 repo 2或P2 repo 3).Repo2包含对Repo1包的依赖,Repo3与Repo1和Repo2包有依赖关系:
Repo1 Target Definition -> Eclipse Orbit P2
Repo2 Target Definition -> Eclipse Orbit P2, P2 repo1
Repo3 Target Definition -> Eclipse Orbit P2, P2 repo1, P2 repo2
Run Code Online (Sandbox Code Playgroud)
现在我有以下问题.构建第一个存储库后,P2 repo1存储库已更新,并包含具有新快照版本的功能.Repo2和Repo3的目标定义取决于Repo1包的先前快照版本,如果不更新相应的目标定义,则无法构建这些存储库(在Eclipse中,目标编辑器中有更新按钮).
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
<unit id="com.myproduct.feature.api.game.feature.group" version="1.0.0.201509251400"/>
<unit id="com.myproduct.feature.impl.game.feature.group" version="1.0.0.201509251400"/>
<repository location="http:............../target/repository/"/>
</location>
Run Code Online (Sandbox Code Playgroud)
所以不可能自动构建所有3个repos,因此构建过程变得过于复杂:
等等....
我现在想使用git子模块来集成这3个repos以避免p2存储库或在一个存储库中移动所有存储库.
我正在尝试导入和解析NatTable项目的开发人员项目,如他们的入门教程中所述.
我收到以下错误mvn -f [path to pom] clean install:
线程"main"中的异常java.lang.NoSuchMethodError:org.apache.maven.execution.MavenSession.getRepositorySession()Lorg/sonatype/aether/RepositorySystemSession;
更多细节:
mvn --version 工作良好%MAVEN_HOME% 指向[devel] /maven-3.1.0这是我目前的测试片段:
<packaging>eclipse-test-plugin</packaging>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>com.springsource.org.junit</artifactId>
<version>4.7.0</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
使用以下插件配置:
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-surefire-plugin</artifactId>
<version>${tycho.version}</version>
<configuration>
<dependencies>
<dependency>
<type>p2-installable-unit</type>
<artifactId>org.eclipse.equinox.ds</artifactId>
</dependency>
<dependency>
<type>p2-installable-unit</type>
<artifactId>org.apache.felix.gogo.shell</artifactId>
</dependency>
</dependencies>
<providerHint>junit47</providerHint>
<argLine>-ea</argLine>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我使用POM优先方法来解决依赖关系:
<pomDependencies>consider</pomDependencies>
Run Code Online (Sandbox Code Playgroud)
上面的JUnit版本是我能找到的唯一版本,它被打包为一个包.
问题是我找不到匹配,允许我在一个片段中一起使用JUnit和Mockito.
我的常见问题是:
我想避免从JUnit,Hamcrest和Mockito创建我自己的包.
tycho ×10
maven ×7
eclipse ×5
eclipse-rcp ×4
java ×3
osgi ×2
aggregation ×1
hamcrest ×1
junit ×1
nattable ×1
p2 ×1
repository ×1