2011-09-13 10 views
5

私は別のチームによってMavenを使って構築されたOSGiバンドルを持っています。 POMファイルはパッケージングを「バンドル」と宣言し、Apache Felixプラグインを使用します。deploy:deploy-fileを使用してOSGiバンドルをMavenレポにデプロイするには?

私たちの内部プロジェクトで使用できるように、このアーティファクトをローカルのMavenリポジトリ(Nexus)に展開する必要があります。

deploy:deploy-fileターゲットを使用して、標準のJARファイルと同じようにバンドルをリポジトリにデプロイしました。これはエラーなく動作します。私は、バンドルから埋め込まれたPOMを抽出して、コマンドラインでそれを渡されたので、コマンドラインは:

mvn deploy:deploy-file -Dfile=3rdpartybundle.jar -DpomFile=pom.xml -DrepositoryId=internal -Durl=http://internalserver/nexus 

問題は、私はこのようにそれを展開するときに、パッケージをバンドルするために設定されていることで、結果として、リポジトリ内の成果物の名前は.jar拡張子の代わりに.bundle拡張子で終わります。

ここでは、それを依存関係として宣言する方法を理解できません。私たちはこのようにそれを宣言する場合:

 <dependency> 
      <groupId>...</groupId> 
      <artifactId>...</artifactId> 
      <version>...</version> 
      <type>bundle</type> 
     </dependency> 

私たちは、依存関係が解決できないというエラーを取得します。興味深いのは、エラーメッセージのGAV座標は、実際には「バンドル」として設定しても、依存関係の型の値として「jar」を持つということです。

我々は、依存関係を変更した場合:

 <dependency> 
      <groupId>...</groupId> 
      <artifactId>...</artifactId> 
      <version>...</version> 
      <type>jar</type> 
     </dependency> 

我々はまったく同じ未解決の依存関係のエラーが発生します。

Mavenリポジトリにバンドルとしてパッケージ化された成果物を、別のプロジェクトのコンパイル時依存として使用するにはどうしたらよいでしょうか?

おかげ

+0

「ローカルリポジトリ」という用語を使用するのはわかりにくいかもしれません。リモートサーバー上のNexusリポジトリに展開しようとしています。サーバーは、チームの全員が共有します。私が「地元」と言ったとき、私は「私たちのLAN上のファイアウォールの中にあった」と思いました。 –

答えて

0

回答ありがとうございます。私は回避策があると思いますしかし)。

@earcarは正しいトラックにありますが、その解決策は、サードパーティのバンドルで既に利用可能なpom.xmlで利用可能なすべての情報(特に依存関係)を活用しません。

したがって、deploy:deploy-fileのドキュメントが少し曖昧であっても、pom.xmlファイルを渡すことができます。およびもパッケージ化パラメータを同時に設定します。だから私のコマンドラインは次のようになります。

mvn deploy:deploy-file -Dfile=3rdpartybundle.jar -DpomFile=pom.xml -DrepositoryId=internal -Durl=http://internalserver/nexus -Dpackaging=jar 

このようにそれをやって、リポジトリ内のpom.xmlは、まだパッケージには「バンドル」タイプのものであり、その他の依存関係のすべてが含まれていますが、と言っていますアーティファクト自体に.jarファイル拡張子があります。

我々は型JARとして私達の依存関係を宣言するときに、Mavenのが正常にそれを解決することができます:

<dependency> 
     <groupId>...</groupId> 
     <artifactId>...</artifactId> 
     <version>...</version> 
     <type>jar</type> 
    </dependency> 

これは基本的に私たちの問題を解決します。私はどのように移植性があるか、信頼できるかどうかはわかりません。 FWIW、Maven 3.0.3を実行しています

ありがとうございました。

0

あなたは完全にタイプを削除してみたい、と、あなたのpom.xmlファイルを含むディレクトリでは、単純な

mvn install 

を行うことがあります。

+0

しかし、これはローカルのメイキングリポジトリにアーティファクトをインストールするだけです... –

+0

ああ、そうです。私はあなたが地元のレポを指していると思っていましたが、もう一度、あなたがネクサスを意味することを明確に読んでください。私のネクサス環境では、bashシェルスクリプトを使って展開しています。だから、私はちょうどあなたが解決策が何であるかを見るのに興味があります! –

+0

チーム全体が共有するNexusを実行するリモートリポジトリに展開する必要があります。 –

0

まず、バンドルフォルダにmvn deployを単に呼び出そうとしましたか? distributionManagementがあなたのネクサスに展開するように設定されていると、バンドルが取得、構築、テスト、展開されることが期待されます。
これが失敗した場合は、手動でnexusウェブインタフェースを使用してバンドルをホストされたリポジトリにインポートできます。

+0

私はあなたがその点を逃したと思う。それは問題がインストールされていない、それはバンドルプラグインで使用されるタイプ "バンドル"です。 – Robin

+0

しかし、彼の質問では、彼は "3rdpartybundle.jar"と言っていました。プロジェクトのアーティファクトは "バンドル"としてパッケージ化されており、jarファイルです。 Apache Felix BundleプラグインのWebサイトで見る限り、アーティファクトとしてjarファイルが作成されます。したがって、アーティファクトが ".bundle"としてデプロイされた場合、デプロイメントの前にアーティファクトの名前を変更する可能性のある別のプラグインが設定されているかどうかを確認します。 –

+0

バンドルは他の会社のチームからのものです。ソースなどはありません。すでにビルドされたバンドルを展開しようとしています。 –

3

問題は「3rdpartybundle.jarは」拡張子=真および/またはサポートされているタイプを設定せずに構築されていることである。

<plugin> 
    <groupId>org.apache.felix</groupId> 
    <artifactId>maven-bundle-plugin</artifactId> 
... 
    <extensions>true</extensions> 
... 
    <configuration> 
     <supportedProjectTypes> 
      <supportedProjectType>jar</supportedProjectType> 
      <supportedProjectType>war</supportedProjectType> 
     </supportedProjectTypes> 

あなたはその上流を修正することはできません場合は、オプションのカップルがあります。

1)新しいプロジェクトのPOMを使用してジャーとしてそれを再梱包:

    <plugin> 
          <groupId>org.apache.maven.plugins</groupId> 
          <artifactId>maven-dependency-plugin</artifactId> 
          <version>2.3</version> 
          <configuration> 
            <actTransitively>false</actTransitively> 
            <outputDirectory>target/classes</outputDirectory> 
            <artifactItems> 
              <artifactItem> 
                <groupId>3rd</groupId> 
                <artifactId>party</artifactId> 
                <version>X.Y.Z</version> 
              </artifactItem> 
            </artifactItems> 
          </configuration> 
          <executions> 
            <execution> 
              <goals> 
                <goal>unpack</goal> 
              </goals> 
              <phase>compile</phase> 
            </execution> 
          </executions> 
        </plugin> 

2)-DgeneratePom=false -Dpackaging=jar -Dfile=/path/to/3rdpartybundle.jarではなく-DpomFile=を指定せずにmvn deploy:deploy-fileを使用してみてください - 内部には、META-INF/Mavenの/のpom.xmlはありません願っています3rdパーティーバンドル。jar - これを使うとうまくいくはずですが、groupId/artifactId/versionパラメータを指定する必要があります。これはプロジェクトのpomから派生しないからです。

過去にバンドルの成果物を構築し、これらを私たちのネクサス(v1.9.0.1)に配備したことを知っています。また、Springリポジトリにもバンドルされていますが、問題はありません。 (ちなみに、それが唯一のアーティファクトだとすれば、AFAIKを依存宣言で指定する必要はありません)

+0

「バンドル」パッケージでパッケージ化されたファイルを展開しようとすると、同様の問題が発生しました。 "-DgeneratePom = false -Dpackaging = jar"は私が必要としていた魔法でした。ありがとう。 – Jared

関連する問題