3

BuildManagementと継続的インテグレーションにはJenkins/Mavenを使用しています。サードパーティライブラリの管理は、セットアップしたNexusサーバーで処理する必要があります。

  • 問題のサードパーティライブラリはorg.eclipse.bpmn20.7.0です。
    • 私たちが知る限り、このライブラリはリモートのMavenリポジトリでホストされていません
  • サードパーティのライブラリを、ホストされているNexusサードパーティのリポジトリにアップロードしました
  • Webを指すプロキシNexusリポジトリがいくつかあります(これは機能します)

次に(多分)問題の部分に移ります:

  • 私たちのプロジェクトはEclipseプラグインで構成されています
    • したがって、Eclipsep2リポジトリにアクセスする必要があります
  • サードパーティライブラリへの依存関係は、Manifest.MFで説明されています
  • Nexusオープンソースはp2リポジトリをサポートしていません
    • したがって、Eclipsep2リポジトリをプロジェクトPOMに追加する必要があります

まず、(おそらく)Jenkinsが使用するMavenのsettings.xmlからの関連設定:

<localRepository>/var/lib/jenkins/local_repo</localRepository>

ローカルのMavenリポジトリがあります。

おそらく重要です:ローカルのMavenリポジトリとNexusはどのように連携しますか?ローカルリポジトリは冗長ですか?Nexusライブラリと競合する可能性はありますか?または、MavenはNexusから依存関係のみをロードし、ローカルリポジトリに保存しますか?Nexusをインストールした後、空にする必要がありますか?

<mirrors>
  <mirror>
  <!--This sends everything else to /public -->
  <id>nexus</id>
  <mirrorOf>*</mirrorOf>
  <url>http://localhost:8082/nexus/content/groups/public</url>
  </mirror>
</mirrors>

<profile>
    <id>nexus</id>
<!--Enable snapshots for the built central repo to direct
    all requests to nexus via the mirror -->
    <repositories>
        <repository>
            <id>central</id>
            <url>http://central</url>
            <releases><enabled>true</enabled></releases>
            <snapshots><enabled>true</enabled></snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>central</id>
            <url>http://central</url>
            <releases><enabled>true</enabled></releases>
            <snapshots><enabled>true</enabled></snapshots>
        </pluginRepository>
    </pluginRepositories>
</profile>

<activeProfiles>
    <activeProfile>nexus</activeProfile>
</activeProfiles>

おそらくお分かりのように、今のところデフォルトのネクサス設定を使用しています。次に、関連するプロジェクトのPOMの内容について説明します。

<repositories>
<!--
    <repository>
        <id>UML2</id>
        <layout>p2</layout>
        <url>http://download.eclipse.org/modeling/mdt/updates/releases/</url>
    </repository>
-->
    <repository>
        <id>indigo</id>
        <layout>p2</layout>
        <url>http://download.eclipse.org/releases/indigo</url>
    </repository>
</repositories>

p2リポジトリをNexusに組み込んでみましたが、オープンソースバージョンではp2リポジトリを処理できないことがわかりました。したがって、Nexusに加えてリポジトリとして、プロジェクトPOMにそれらを含める必要があります。MDTリポジトリがなくても機能するように見えるため、MDTリポジトリはコメント化されています。

org.eclipse.bpmn2への依存関係は、それを使用する対応するプラグインのmanifest.MFにあります。

Require-Bundle: 
 org.eclipse.bpmn2;bundle-version="0.7.0";visibility:=reexport

ライブラリはNexusにアップロードされました(GAVパラメータを使用):

  • GroupID:org.eclipse
  • ArtifactID:org.eclipse.bpmn2
  • バージョン:0.7.0.201111021300
  • 包装:瓶

重要かもしれません:分類子は空のままでした。ここに何を入力する必要がありますか?

JenkinsジョブとMavenを-e-Xで開始すると、出力は次のようになります。

[DEBUG] P2resolver.addMavenProject de.some.tool:pom:2.0
[INFO] Adding repository (cached) http://download.eclipse.org/releases/indigo
[DEBUG] Added p2 repository indigo (http://download.eclipse.org/releases/indigo)
[INFO] Cannot complete the request.  Generating details.
[INFO] Cannot complete the request.  Generating details.
[INFO] {org.osgi.framework.executionenvironment=OSGi/Minimum-1.0,OSGi/Minimum-1.1, osgi.ws=gtk, osgi.arch=x86, osgi.os=linux, org.eclipse.update.install.features=true, org.osgi.framework.system.packages=}
[ERROR] Cannot resolve project dependencies:
[ERROR]   Software being installed: de.modeltype.bpmn2 1.0.0.qualifier
[ERROR]   Missing requirement: de.modeltype.bpmn2 1.0.0.qualifier requires 'bundle org.eclipse.bpmn2 0.7.0' but it could not be found
[ERROR] 
mavenExecutionResult exceptions not empty
message : Internal error: java.lang.RuntimeException: "No solution found because the problem is unsatisfiable.": ["Unable to satisfy dependency from de.modeltype.bpmn2 1.0.0.qualifier to bundle org.eclipse.bpmn2 0.7.0.", "No solution found because the problem is unsatisfiable."]
cause : "No solution found because the problem is unsatisfiable.": ["Unable to satisfy dependency from de.modeltype.bpmn2 1.0.0.qualifier to bundle org.eclipse.bpmn2 0.7.0.", "No solution found because the problem is unsatisfiable."]
Stack trace : 
org.apache.maven.InternalErrorException: Internal error: java.lang.RuntimeException: "No solution found because the problem is unsatisfiable.": ["Unable to satisfy dependency from de.modeltype.bpmn2 1.0.0.qualifier to bundle org.eclipse.bpmn2 0.7.0.", "No solution found because the problem is unsatisfiable."]
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:168)
    at org.jvnet.hudson.maven3.launcher.Maven3Launcher.main(Maven3Launcher.java:79)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchStandard(Launcher.java:329)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:239)
    at org.jvnet.hudson.maven3.agent.Maven3Main.launch(Maven3Main.java:158)
    at hudson.maven.Maven3Builder.call(Maven3Builder.java:104)
    at hudson.maven.Maven3Builder.call(Maven3Builder.java:70)
    at hudson.remoting.UserRequest.perform(UserRequest.java:118)
    at hudson.remoting.UserRequest.perform(UserRequest.java:48)
    at hudson.remoting.Request$2.run(Request.java:287)
    at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.RuntimeException: "No solution found because the problem is unsatisfiable.": ["Unable to satisfy dependency from de.modeltype.bpmn2 1.0.0.qualifier to bundle org.eclipse.bpmn2 0.7.0.", "No solution found because the problem is unsatisfiable."]
    at org.eclipse.tycho.p2.impl.resolver.ProjectorResolutionStrategy.resolve(ProjectorResolutionStrategy.java:106)
    at org.eclipse.tycho.p2.impl.resolver.P2ResolverImpl.resolveProject(P2ResolverImpl.java:102)
    at org.eclipse.tycho.p2.impl.resolver.P2ResolverImpl.resolveProject(P2ResolverImpl.java:69)
    at org.eclipse.tycho.p2.resolver.P2TargetPlatformResolver.doResolvePlatform(P2TargetPlatformResolver.java:342)
    at org.eclipse.tycho.p2.resolver.P2TargetPlatformResolver.resolvePlatform(P2TargetPlatformResolver.java:162)
    at org.eclipse.tycho.core.resolver.DefaultTychoDependencyResolver.resolveProject(DefaultTychoDependencyResolver.java:85)
    at org.eclipse.tycho.core.maven.TychoMavenLifecycleParticipant.afterProjectsRead(TychoMavenLifecycleParticipant.java:91)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:273)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
    ... 19 more
channel stopped
Finished: FAILURE

何が間違っているのですか?

4

2 に答える 2

3

ここでいくつかのことが起こっています:

おそらく重要です:ローカルのMavenリポジトリとNexusはどのように連携しますか?ローカルリポジトリは冗長ですか?Nexusライブラリと競合する可能性はありますか?または、MavenはNexusから依存関係のみをロードし、ローカルリポジトリに保存しますか?Nexusをインストールした後、空にする必要がありますか?

Mavenは、ローカルリポジトリに見つからないアーティファクトをリモートリポジトリから要求します。Nexusは、同じマシン上にある場合でも、リモートリポジトリです。したがって、新しいNexusセットアップでリクエストを実行するには、最初にローカルリポジトリを空にする必要があります。その後、MavenによってNexusとローカルリポジトリにキャッシュされます。

次のことはあなたがこれを持っているということです:

<mirrorOf>*</mirrorOf>

これは、すべてのリポジトリについてNexusにリクエストを送信するようにMavenに指示します。これには、設定の下位で定義したP2リポジトリが含まれます。Mavenにミラーをバイパスするように指示するには、次のようにします。

<mirrorOf>*,!indigo</mirrorOf>

さらに、Nexusのp2プラグインはオープンソースで利用でき、デフォルトではバンドルに含まれていませんが、手動でダウンロードしてインストールできます。

そして最後に、ここにIRCルームとメーリングリストおよびナレッジベースがあり、役立つ可能性があります: http: //www.sonatype.org/nexus/participate

于 2012-04-13T11:58:11.217 に答える
0

デフォルトでは、Tychoは依存関係を解決するためにMavenリポジトリーを検索しません。(背景:MavenリポジトリのインデックスにはTychoが依存関係を解決するための十分な情報が含まれていないため、完全なMavenリポジトリを検索できません。したがって、TychoはすべてのMavenアーティファクトをダウンロードして分析する必要があります。)

ただし、Tychoの検索スペース(いわゆる「ターゲットプラットフォーム」)にいくつかのMavenアーティファクトを追加することは可能です。

  1. プラグインでpomDependencies=considerを設定します( POMの例についてはこちらを参照してください)target-platform-configuration
  2. POMのGAVによってorg.eclipse.bpmn2バンドルに依存関係を追加します。

マニフェストにが含まれている場合Require-Bundle: org.eclipse.bpmn2、バンドルはターゲットプラットフォームにあるため、Tychoはその依存関係を解決できます。

org.eclipse.bpmn2バンドルを推移的に必要とするすべてのモジュールで上記の構成と依存関係を持っている必要があることに注意してください。したがって、おそらくそれを親POMに入れたいと思うでしょう。

于 2012-07-19T17:51:03.520 に答える