3

Tycho 0.15.0 に奇妙な問題があります。my には 8 つの依存関係がありますがMANIFEST.MF、Tycho はそのうちの 1 つを解決できません。出力は次のようになります。

[INFO] 1 operation remaining.
[INFO] Fetching org.eclipse.xtext.logging_1.2.15.v201206120633.jar (4kB of 10.12kB at 0B/s) from http://my.server.com/p2-3.7.2/plugins/
[INFO] Resolving class path of MavenProject: <...my project ...> @ <...path to my project...>/pom.xml
[ERROR] Internal error: java.lang.RuntimeException: org.osgi.framework.BundleException: Bundle <...my project...> cannot be resolved
[ERROR] Resolution errors:
[ERROR] Bundle <...my project...> - Missing Constraint: Require-Bundle: org.eclipse.xtext.logging; bundle-version="1.2.15"
[ERROR] -> [Help 1]
org.apache.maven.InternalErrorException: Internal error: java.lang.RuntimeException: org.osgi.framework.BundleException: Bundle <...my project...> cannot be resolved
Resolution errors:
Bundle <...my project...> - Missing Constraint: Require-Bundle: org.eclipse.xtext.logging; bundle-version="1.2.15"

私が知っていること:

  1. org.eclipse.xtext.logging_1.2.15.v201206120633.jarは存在する
  2. 瓶は壊れていません
  3. Tycho は私の p2 サーバーからダウンロードできます (~/.m2/repository/p2/osgi/bundle/org.eclipse.xtext.logging/1.2.15.v201206120633/org.eclipse.xtext.logging-1.2.15.v201206120633.jar私のコンピューターにはあります)。
  4. MANIFEST.MF正しいように見えます:

    Manifest-Version: 1.0
    Ant-Version: Apache Ant 1.8.2
    Bundle-Vendor: %providerName
    Bundle-Localization: fragment
    Fragment-Host: org.apache.log4j;bundle-version="[1.2.15,1.2.16)"
    Bundle-RequiredExecutionEnvironment: J2SE-1.5
    Bundle-Name: %pluginName
    Bundle-SymbolicName: org.eclipse.xtext.logging;singleton:=true
    Created-By: 1.5.0_22-b03 (Sun Microsystems Inc.)
    Bundle-Version: 1.2.15.v201206120633
    Bundle-ManifestVersion: 2
    Import-Package: org.eclipse.core.runtime,org.osgi.framework;version="1
    .5.0"
    
  5. Tycho 0.16.0 にも同じ問題があります。

何か案は?

4

1 に答える 1

5

この動作が見られるのは、次の理由によるものです。

  • org.eclipse.xtext.loggingはフラグメントであり、スタンドアロンのバンドルではありません (これは、これがフラグメントである他のバンドルを定義する に含まれているためです) Fragment-HostMANIFEST.MF
  • フラグメントが p2 でエンコードされる方法で、aRequire-Bundleからフラグメントへは p2 で解決できます。p2 ベースの依存関係の解決により、ターゲット プラットフォームのどのアーティファクトがローカルの Maven リポジトリにダウンロードされるかが決まります。
  • Require-BundleフラグメントへのAは、OSGi サーバーでは解決されません。クラス パスを計算するために (したがって、コンソール出力Resolving class path)、Tycho は Equinox リゾルバーを使用します。そのリゾルバーは、フラグメントへの Require-Bundle が無効であることを正しく検出します。
于 2012-11-21T14:03:42.030 に答える