Tycho загружает зависимость, но не может ее разрешить

У меня странная проблема с Tycho 0.15.0. В моем MANIFEST.MF есть 8 зависимостей, но Tycho не может разрешить одну из них. Вывод выглядит следующим образом:

[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 та же проблема.

Любые идеи?


person Aaron Digulla    schedule 21.11.2012    source источник
comment
org.eclipse.xtext.logging — это фрагмент. Я не верю, что вы можете зависеть от него напрямую. Вам, вероятно, потребуется org.apache.log4j   -  person Simon    schedule 21.11.2012
comment
не уверен, что это напрямую связано, но org.eclipse.core.runtime — это разделенный пакет help.eclipse.org/juno/ . Вы должны устранить неоднозначность своего оператора Import-Package (или использовать Require-Bundle)   -  person jsievers    schedule 21.11.2012
comment
также взгляните на bugs.eclipse.org/bugs/show_bug.cgi? идентификатор = 353116   -  person jsievers    schedule 21.11.2012
comment
@jsievers: я не могу изменить манифест org.eclipse.xtext.logging, но ошибка выглядит интересно.   -  person Aaron Digulla    schedule 21.11.2012
comment
@Simon: хорошо, это объяснило бы это. Я бы принял это как ответ.   -  person Aaron Digulla    schedule 21.11.2012


Ответы (1)


Вы наблюдаете такое поведение по следующим причинам:

  • org.eclipse.xtext.logging — это фрагмент, а не отдельный пакет (вы можете видеть это, потому что он имеет Fragment-Host в MANIFEST.MF, который определяет другой пакет, фрагментом которого является этот).
  • То, как фрагменты кодируются в p2, Require-Bundle к фрагменту может быть разрешено в p2. Разрешение зависимостей на основе p2 определяет, какие артефакты целевой платформы загружаются в локальный репозиторий Maven.
  • Require-Bundle для фрагмента не будет разрешаться на сервере OSGi. Для вычисления пути к классу (отсюда вывод консоли Resolving class path) Tycho использует преобразователь Equinox. Этот распознаватель правильно определяет, что Require-Bundle для фрагментов недействителен.
person oberlies    schedule 21.11.2012