12

いくつかのWARファイルをコンパイルしようとしていますが、それらはすべて共通のJARモジュールに依存しています。ただし、Gradleビルドでは、Javaプラグインで動作する「Provided」のような依存関係を取得できないようです。

私のコンパイルは次のようになります。

apply plugin: 'java'
configurations{
    providedCompile
}

dependencies {
    compile module("org.springframework.amqp:spring-amqp:${springAmqpVersion}")
    compile module("org.slf4j:slf4j-api:${slf4jVersion}")
    compile module("org.slf4j:slf4j-ext:${slf4jVersion}")

    providedCompile "javax.servlet:servlet-api:${servletApiVersion}"

    runtime module("org.slf4j:jcl-over-slf4j:${slf4jVersion}")
    runtime module("org.slf4j:jul-to-slf4j:${slf4jVersion}")
    runtime module("org.slf4j:log4j-over-slf4j:${slf4jVersion}")

    sourceArchives module("org.springframework.amqp:spring-amqp:${springAmqpVersion}:sources")
    sourceArchives module("javax.servlet:servlet-api:${servletApiVersion}:sources")
}


sourceSets {
    main { compileClasspath += configurations.providedCompile }
}

ただし、その最後のビットは例外を取得する場所です。ランタイム依存関係によってサーブレットAPI(Tomcatが提供)を構成に追加するか、コンパイルモジュールとして配置し、後でランタイム依存関係から削除してみました。

依存関係を変更するいくつかの異なる方法を試しましたが、最も近い結果は次のとおりです。

newRuntime = configurations.runtime.minus(configurations.providedCompile)
configurations.runtime = newRuntime

ただし、この最後のビットは、適切な依存関係を持つ変数newRuntimeを生成しますが、変数をランタイム構成に再割り当てしようとすると、「プロパティの例外が見つかりません」がスローされます。

Gradleのバグ追跡でこの正確な問題について多くの議論を見つけました:Gradle-784

ただし、そこからの主なリードは、私がよく知らないGradleビルドでMavenを使用するSpringからのものです。

私がここSOで見つけた最も有望なリンクですが、残念ながら、例をうまく機能させることができませんでした 。

//Include provided for compilation
sourceSets.main.compileClasspath += configurations.provided

この行は他の試みのようにエラーを出しませんが、コンパイルが試みられるとクラスパスエラーが発生するため、providedCompile(提供された私のバージョン)の依存関係は実際にはコンパイルクラスパスに置かれないようです。

4

3 に答える 3

5

構成を追加しましたprovidedCompileが、何もしていません。したがって、どのクラスパスにも作成されません。構成をメインのコンパイル クラス パスに配置するには、次のようにします。

sourceSets.main.compileClasspath += configurations.providedCompile

同様に、テスト コンパイル クラス パスに配置するには、次のようにします。

sourceSets.test.compileClasspath += configurations.providedCompile
于 2012-09-06T15:59:34.647 に答える
5

私はあなたのメッセージに 100% 従っているわけではありませんが、providedCompile は「war」プラグインに対してのみ許可されています。

apply plugin: 'war'

dependencies {
  // others go here
  providedCompile "javax.servlet:javax.servlet-api:${servletVersion}"
}

「war」ステップの間、サーブレット jar は含まれません。

于 2012-09-06T13:52:59.130 に答える
3

「jar」モジュール内でコンパイルスコープを使用し、 「war」モジュール内でprovidedCompileを使用できます。

War のprovidedCompileスコープは、jar のコンパイルスコープをオーバーライドします。

于 2014-01-23T15:30:35.023 に答える