Tycho:Bundle X - Missing Constraint:Bundle-RequiredExecutionEnvironment:JavaSE-1.7

Jmi*_*ini 4 eclipse-plugin eclipse-rcp tycho maven osgi-bundle

我已经从改变BREE JavaSE-1.6JavaSE-1.7我的应用程序的清单文件:

Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Run Code Online (Sandbox Code Playgroud)

现在我无法再次编译应用程序.

当我跑步时,mvn clean install我得到:

[INFO] Resolving dependencies of MavenProject: Xgroup:X:4.0.100-SNAPSHOT @ C:\Users\....\X\pom.xml
[WARNING] The following locally built units have been used to resolve project dependencies:
[WARNING]   Za
[WARNING]   Zb
[INFO] Resolving class path of MavenProject: Xgroup:X:4.0.100-SNAPSHOT @ C:\Users\....\X\pom.xml
[ERROR] Internal error: java.lang.RuntimeException: org.osgi.framework.BundleException: Bundle X cannot be resolved
[ERROR] Resolution errors:
[ERROR] Bundle X - Missing Constraint: Bundle-RequiredExecutionEnvironment: JavaSE-1.7
[ERROR] -> [Help 1]
org.apache.maven.InternalErrorException: Internal error: java.lang.RuntimeException: org.osgi.framework.BundleException: Bundle X cannot be resolved
Resolution errors:
   Bundle X - Missing Constraint: Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Run Code Online (Sandbox Code Playgroud)

我的toolchains.xml包含:

  <toolchain>
     <type>jdk</type>
     <provides>
         <version>1.7</version>
         <vendor>sun</vendor>
         <id>JavaSE-1.7</id>
     </provides>
     <configuration>
        <jdkHome>C:\Java\jdk1.7.0_45</jdkHome>
     </configuration>
  </toolchain>
Run Code Online (Sandbox Code Playgroud)

当我运行mvn -versionJava版本时似乎没问题:

Apache Maven 3.0.4 (r1232337; 2012-01-17 09:44:56+0100)
Maven home: C:\Tools\apache-maven-3.0.4\bin\..
Java version: 1.7.0_17, vendor: Oracle Corporation
Java home: C:\Java\jdk1.7.0_17\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "x86", family: "windows"
Run Code Online (Sandbox Code Playgroud)

我想我的JAVA_HOME是正确的,但我不确定.echo %JAVA_HOME%打印C:\Java\jdk1.7.0_17\jre.一个第谷,邮件列表相关的问题是由正确设置JAVA_HOME解决了,但我的问题似乎是不同的.

我在版本0.19.0中使用Tycho.我也尝试过更新的版本,但这并没有改变任何东西.

obe*_*ies 6

仔细查看日志消息 - 您不可能收到错误消息

[ERROR] Bundle X - Missing Constraint: Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Run Code Online (Sandbox Code Playgroud)

而Tycho解析依赖关系和依赖于捆绑X的不同捆绑项目Y的编译类路径.在错误之前找到以下日志消息中的最后一个:

[INFO] Resolving class path of MavenProject: ...
Run Code Online (Sandbox Code Playgroud)

此行显示哪个项目具有分辨率问题.


如果失败的项目实际上是依赖于捆绑X的不同的捆绑Y,则应检查Bundle-RequiredExecutionEnvironment捆绑Y 的头部:如果捆绑Y声明例如JavaSE-1.6的BREE,则预期构建失败.原因如下:除非另有配置,否则Tycho假定您要在OSGi容器中运行包Y,该容器提供BREE标头中指定的执行环境.在该示例中,这将是JavaSE-1.6 VM上的OSGi容器.但是在这样的容器中,Y无法启动,因为它依赖于无法启动的X. 这是Tycho检测到的以及构建失败的原因.

您可以通过不同方式处理这种情况:

  • 同时更改包Y的BREE标头.如果您知道Y将始终与需要JavaSE-1.7的bundle X版本一起运行,这尤其有意义.

  • 将捆绑Y的执行环境与BREE头分开executionEnvironment配置,例如通过目标平台配置(不推荐).这也可能会改变编译包Y的JRE,因此实际上捆绑Y可能不再在Java 6上运行.因此,如果您完全理解执行环境对构建影响,则只使用此选项.

  • 通过将目标平台配置参数设置resolveWithExecutionEnvironmentConstraintsfalse(自Tycho 0.22.0起),禁用Tycho对执行环境约束的检查.如果您的bundle Y可能使用与编译时使用的版本完全不同的bundle X版本或实现,那么这可能是有意义的.


如果失败的项目是捆绑X项目本身,则在(父)POM或build.properties中存在一些配置,这使得Tycho使用Bundle-RequiredExecutionEnvironment与捆绑X 的头部中指定的环境不同的较低执行环境(请参阅文档执行环境配置的详细信息).您应该删除这个冲突的冗余配置.

  • 谢谢.你关于`build.properties`的说明让我检查一下.我在我的项目中有:`jre.compilation.profile = JavaSE-1.6`.将其更改为JavaSE-1.7可以解决我的问题. (2认同)