【问题标题】:Tycho: Bundle X - Missing Constraint: Bundle-RequiredExecutionEnvironment: JavaSE-1.7Tycho:Bundle X - 缺少约束:Bundle-RequiredExecutionEnvironment:JavaSE-1.7
【发布时间】:2014-10-13 20:39:05
【问题描述】:

我已将应用程序清单文件中的 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。一个related problem on the Tycho-Mailing list通过正确设置JAVA_HOME解决了,但是我的问题好像不一样了。

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

【问题讨论】:

  • 很好的问题顺便说一句!感谢您扩展 log sn-p,这使它对未来的读者更加有用:-)

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


【解决方案1】:

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

[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 声明例如JavaSE-1.6 的 BREE,预计构建失败。这样做的原因如下:除非另有配置,否则 Tycho 假定您希望在提供 BREE 标头中指定的执行环境的 OSGi 容器中运行 bundle Y。在示例中,这将是 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 0.22.0 起)禁用 Tycho 检查执行环境约束。 This may make sense 如果您的包 Y 可能使用与您在编译时使用的版本完全不同的版本或执行包 X 运行。


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

【讨论】:

  • 谢谢。你关于build.properties 的注释让我检查了这个。我的项目中有:jre.compilation.profile = JavaSE-1.6。将此更改为 JavaSE-1.7 可以解决我的问题。
【解决方案2】:

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

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

【讨论】:

  • 感谢您的链接,它包含我的问题的解决方案。 @oberlies 提供的答案包含更多解释,这就是我选择它的原因。
猜你喜欢
  • 2018-12-12
  • 2021-06-13
  • 2019-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-17
  • 2018-09-01
相关资源
最近更新 更多