2017-08-29 7 views
0

私の会社のJFrog.io(fka:ArtifactoryOnline.com)リポジトリに新しいリリースビルドを展開しようとした際に奇妙なバグが発生しました。私が取り組んでいるプロジェクトには複数のmavenモジュールがあり、すべてが単一の親の下にあります。 mavenがビルドするJARファイルをJFrogにアップロードすると、生成されたPOMファイルに誤った親のartifactIdが設定されています。Artifactory/JFrogは生成されたPOMに間違った親のartifactIdを生成しています

私は長い時間を費やしていましたが、私の会社のコードベースでは問題が見つからなかったので、エラーをゼロから再現できるかどうかを決めました。したがって、私はthis throwaway projectにバグを示すようにしました。

親POM、 "ブルーベリー":

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>org.nbyrd</groupId> 
    <artifactId>blueberry</artifactId> 
    <packaging>pom</packaging> 
    <version>1.0</version> 
    <modules> 
     <module>blueberryjam</module> 
     <module>berries</module> 
    </modules> 
</project> 

依存POM 1: "ベリー":

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <parent> 
     <artifactId>blueberry</artifactId> 
     <groupId>org.nbyrd</groupId> 
     <version>1.0</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 

    <artifactId>berries</artifactId> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

完全なプロジェクトをダウンロードで興味方のために、ここでは関係POMファイルがあります従属POM 2:「ベリージャム」:

(これらのPOMファイルはすべて、 )

私は2つのMavenモジュール「ベリー」と「ベリージャム」を持っています。これらは中央の親モジュール「ブルーベリー」の下に収納されています。 。ベリージャムは、ベリーを依存関係として使用しますが、問題に関連するかどうかはわかりません。

プロジェクトをビルドすると、berries-1.0.jarberry-jam-1.0.jarという2つのJARファイルが取得されます。これは予想通りです。この時点で、私はArtifactoryにこれらのアーティファクトをアップロードし、他のプロジェクトがそれらを参照できるようにします。そして、これがトラブルの始まりです。私はberries-1.0.jarをアップロードすると は、Artifactoryは以下のPOMファイルを生成します:あなたが見ることができるように

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http:// maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <parent> 
     <artifactId>berries</artifactId> 
     <groupId>org.nbyrd</groupId> 
     <version>1.0</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 

    <artifactId>berries</artifactId> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

は、生成されたPOMは間違っている「ベリー」、と親たartifactIdを定義します。どちらの場合も

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http:// maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <parent> 
     <artifactId>blueberry-jam</artifactId> 
     <groupId>org.nbyrd</groupId> 
     <version>1.0</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 

    <artifactId>blueberry-jam</artifactId> 
    <dependencies> 
     <dependency> 
      <groupId>org.nbyrd</groupId> 
      <artifactId>berries</artifactId> 
      <version>1.0</version> 
     </dependency> 
    </dependencies> 
</project> 

が、私はそれが明示的に子-モジュールのPOMファイルの両方に記載されているようPARENTIDは、「ブルーベリー」であることを期待する:私はberry-jam-1.0.jarをアップロードする際に 同じ問題が発生します。これらの不正なartifactIdsは、これらのライブラリを使用することを不可能にします。これらのライブラリを使用するには、サードパーティのアプリケーションを試みた場合の依存関係をダウンロードする際に、Mavenは次の警告が生成されますし、ビルドが失敗します。

を[警告] org.nb​​yrdのためのPOM:ベリーます。jar:1.0が無効です、推移的依存関係(もしあれば)、利用可能Artifactoryにアップロードする際に、過去に正しく機能するために使用詳細

この機能のデバッグログを有効にするので、何かがどのように変更された場合、私はわからないではないだろうツールが動作するか、単に私が間違って何かをした場合。何かご意見は?

+0

「これらのアーティファクトをArtifactoryにアップロードして、他のプロジェクトで参照できるようにする」とはどういう意味ですか?手動でアップロードしたことを意味しますか?または 'mvn deploy'を介してMavenビルドを使用しましたか? – khmarbaise

+0

@khmarbaise私はjfrog.ioにログインしてそれらをアップロードし、私のブラウザを介して適切なレポにアーティファクトをアップロードします。私は前に 'mvn deploy'を使って試してみませんでした。 – nasukkin

+0

@khmarbaise 'mvn deploy'を立ち上げてくれてありがとう。私は 'distributionManagement'設定でプロジェクトを設定し、それにスピンを与え、アーティファクトが正しく配備されました。だから、少なくとも私はブロックされていませんが、なぜwebappバージョンのデプロイメントで問題になるのだろうと思います。 – nasukkin

答えて

1

mvn deployを使用すると、mavenはpom.xmlファイルを分離アーティファクトとして展開します。しかし、あなたがartifactoryのWeb UIを使ってjarファイルをアップロードし、artifactoryにpomファイルを生成するように頼むと、jarファイルのデータから生成すると思います。したがって、アーティファクトは親プロジェクトの存在を認識しません。

関連する問題