1

私は解決できなかった特定の問題に出くわしました。助けに感謝します。もともと、Java プロジェクトにアーティファクトのみの依存関係としていくつかの jar 依存関係を含めました。これは次のようになりました。

    compile "com.example:projectA:1.0.0@jar"

ここまでは順調ですね。このプロジェクトを「A」としましょう。プロジェクトAを別のJavaプロジェクトBに含めました。これもgradleを使用しています。maven-publish で公開された A は、B で使用するときに、pom ファイルですべての推移的な依存関係を除外していないことに気付きました。

だから私は推移的なフラグを使い始めました:

dependency("com.example:projectA:1.0.0") {
    transitive = false
}

これにより、プロジェクト B で、Eclipse プラグインと gradle 自体を使用するときに、A のすべての推移的な deps を除外したことが確認されます。

ただし、公開された pom.xml で除外が欠落しているという問題は残りました。次に、執筆時点で私のgradleバージョンで解決されているように見えるこの問題を見つけました:GRADLE-2945

だから私は次のことを試しました:

dependency("com.example:projectA:1.0.0") {
    exclude group: '*'
}

pom ファイルには、 maven docに従って、推移的な依存関係に必要な除外ルールが正しく含まれるようになりました。

<groupId>com.example</groupId>
<artifactId>projectA</artifactId>
<version>1.0.0</version>
<exclusions>
  <exclusion>
    <groupId>*</groupId>
    <artifactId>*</artifactId>
  </exclusion>
</exclusions>

ただし、これは別の問題を引き起こします。compileJava タスクを使用する場合、eclipse も gradle 自体も、そのように A を含めるとプロジェクト B のコードをコンパイルできませんでした。その推移的な依存関係とともに、A 自体が姿を消しました。

ただし、奇妙なことに、依存関係タスクによれば、それはコンパイル クラスパスの一部です。

私は JRE7 と gradle 2.3 を eclipse 4.41 で使用しており、nexus を内部の Maven リポジトリとして使用しています。

推移フラグを使用する必要はなく、必要な除外を追加して、生成された pom ファイルを手動で操作する必要はないと思います。


プロジェクト A として dbcp を使用して問題を再現するサンプル プロジェクト:

Main.java:

import org.apache.commons.dbcp.BasicDataSource;
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello World");
        BasicDataSource ds = new BasicDataSource();
    }
}

build.gradle:

version = '0.0.1'
group = 'com.example'

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'maven-publish'

repositories {
    mavenCentral()
}

dependencies {
    compile ('commons-dbcp:commons-dbcp:1.4')
    {
        transitive=false
    }
//  {
//      exclude group: '*'
//  }
} 

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
}
4

2 に答える 2

0

これはGradleのバグだったのではないかと思います。コマンドラインからGradle 2.3と2.5の両方でサンプルファイルをテストしました。を使用するtransitive = falseと、両方のバージョンでプロジェクトが正常にコンパイルされます。構文に切り替えるとexclude group: '*'、2.3 ビルドが壊れます。Gradle 2.5 は引き続き正常に動作します。

つまり、Gradle のアップグレードで問題が解決するはずです。

于 2015-07-22T17:48:07.407 に答える