第谷:Bundle X - 缺少约束:Bundle-RequiredExecutionEnvironment:JavaSE-1.7

2024-01-09

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

Bundle-RequiredExecutionEnvironment: JavaSE-1.7

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

当我跑步时mvn clean install I get:

[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

My 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 -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"

我想我的 JAVA_HOME 是正确的,但我不确定。echo %JAVA_HOME% prints C:\Java\jdk1.7.0_17\jre. A 第谷邮件列表上的相关问题 https://dev.eclipse.org/mhonarc/lists/tycho-user/msg01964.html通过正确设置 JAVA_HOME 解决了,但我的问题似乎有所不同。

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


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

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

而 Tycho 则解决依赖关系以及依赖于捆绑包 X 的不同捆绑包项目 Y 的编译类路径。在出现错误之前查找以下日志消息中的最后一条:

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

该行显示哪个项目存在分辨率问题。


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

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

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

  • 与 BREE 标头分开配置包 Y 的执行环境,例如通过executionEnvironment目标平台配置(不推荐)。这也可能会更改捆绑包 Y 编译所针对的 JRE,因此捆绑包 Y 实际上可能不再在 Java 6 上运行。因此,只有在您完全理解执行环境对构建的影响 https://wiki.eclipse.org/Tycho/Execution_Environments#Effects_of_the_execution_environment_in_the_build.

  • 通过设置目标平台配置参数来禁用第谷对执行环境约束的检查resolveWithExecutionEnvironmentConstraints to false(自第谷 0.22.0 起)。这可能有道理 https://wiki.eclipse.org/Execution_Environments#Which_Execution_Environment_should_I_use.3F如果您的捆绑包 Y 可能使用与您在编译时使用的版本完全不同的版本或捆绑包 X 的实现运行。


如果失败的项目是捆绑包 X 项目本身,则(父)POM 或 build.properties 中存在一些配置,这使得第谷使用与在Bundle-RequiredExecutionEnvironment捆绑包 X 的标头(参见执行环境配置文档 https://wiki.eclipse.org/Tycho/Execution_Environments#Execution_environment_configuration了解详情)。您可能应该删除这个冲突的冗余配置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第谷:Bundle X - 缺少约束:Bundle-RequiredExecutionEnvironment:JavaSE-1.7 的相关文章

随机推荐