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

时间:2014-10-13 20:39:05

标签: maven eclipse-plugin eclipse-rcp tycho osgi-bundle

我已在我的应用程序的清单文件中将BREE从JavaSE-1.6更改为JavaSE-1.7

Bundle-RequiredExecutionEnvironment: JavaSE-1.7

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

当我运行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

我的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>

当我运行mvn -version时,Java版似乎没问题:

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"

我想我的JAVA_HOME是正确的,但我不确定。 echo %JAVA_HOME%打印C:\Java\jdk1.7.0_17\jre。通过正确设置JAVA_HOME解决了related problem on the Tycho-Mailing list,但我的问题似乎有所不同。

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

2 个答案:

答案 0 :(得分:6)

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

[ERROR] Bundle X - Missing Constraint: Bundle-RequiredExecutionEnvironment: JavaSE-1.7

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

[INFO] Resolving class path of MavenProject: ...

此行显示哪个项目有解决问题。


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

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

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

  • 将捆绑Y的执行环境与BREE标头分开配置,例如:通过executionEnvironment目标平台配置(不推荐)。这也可能会更改编译包Y的JRE,因此实际上捆绑Y可能不再在Java 6上运行。因此,如果您完全理解implications of the execution environment on the build,则只能使用此选项。

  • 通过将目标平台配置参数resolveWithExecutionEnvironmentConstraints设置为false来禁用Tycho对执行环境约束的检查(自Tycho 0.22.0起)。 This may make sense如果您的捆绑包Y可能使用与编译时使用的版本完全不同的捆绑X版本或实现。


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

答案 1 :(得分:1)

是否可以在pom.xml中配置不同的执行环境(可能从父pom继承)?参见

https://wiki.eclipse.org/Tycho/Execution_Environments#Execution_environment_configuration