web-dev-qa-db-ja.com

Gradle:WARからJARを除外する方法は?

マルチプロジェクトのGradleビルド構造があり、子プロジェクトがJARに依存しているため、WARファイルに含めたくありません。 「除外」を試みましたが、機能しません。

メインプロジェクトスクリプト:

apply plugin: 'war'
war {
    dependencies {
        runtime (project(':childProject')) {
            exclude group: 'javax.servlet.jsp', module: 'jsp-api'
        }
    }
}

ChildProjectスクリプト:

apply plugin: 'Java'
dependencies {
    compile 'javax.servlet.jsp:jsp-api'
}
17
isobretatel

Gradleのドキュメントから

Warプラグインは、providedCompileとprovidedRuntimeの2つの依存関係設定を追加します。これらの構成のスコープは、WARアーカイブに追加されないことを除いて、それぞれのコンパイル構成およびランタイム構成と同じです。

したがって、言い換えると、providedCompileまたはprovidedRuntimeにエントリを追加すると、その依存関係がwarファイルから除外されます。

  • コンパイルのためにいくつかのクラスに依存するソースがある場合は、providedCompileを使用します
  • テストに使用してコンパイルしない場合は、providedRuntimeを使用します。

http://www.gradle.org/docs/current/userguide/war_plugin.html

providedCompile "javax.servlet:servlet-api:2.5"

24
John Vint

私はそれをこのようにしています。

war {   
    rootSpec.exclude("**/some-*.jar")
}
20
d-sauer

私は、providedCompileが依存関係の問題を引き起こすことがあることに気付きました。一部のクラスが見つかりません。次に、より柔軟なソリューションを見つけました。

次のwar構成を使用して、必要な依存関係を「コンパイル」として構成し、特定のjarをwarファイルから除外できます。

war {
    classpath = classpath.filter { file ->
        println file.name
        (
            !file.name.startsWith('gwt-dev') &&
            !file.name.startsWith('gwt-user') &&
            !file.name.startsWith('guava-gwt') &&
            !file.name.startsWith('gwtbootstrap3') &&
            !file.name.startsWith('gwtbootstrap3-extras') &&
            !file.name.startsWith('servlet-api')
        )
    }
}

これまでのところ、これが私にとって最もクリーンなソリューションであることがわかりました。お役に立てば幸いです。

5
Jake W

私は同じ問題を抱えていましたが、Jake Wのものに基づいた一般的な解決策を見つけました。

子プロジェクトで、warプラグインを使用せずに、次のように独自のprovidedCompileとprovidedRuntimeを追加します。

configurations {
  providedCompile
  providedRuntime.extendsFrom providedCompile
}

plugins.withId('Java') {
  configurations {
    compile.extendsFrom providedCompile
    runtime.extendsFrom providedRuntime
  }
}

Warファイルを含むプロジェクトで、これを好きな場所にコピーします。

configurations.runtime.allDependencies.withType(ProjectDependency) { ProjectDependency dep ->
  Project proj = dep.dependencyProject
  evaluationDependsOn(proj.path)
  Configuration cfg = proj.configurations.findByName('providedRuntime')
  if (cfg != null){
    war {
      classpath -= cfg
    }
  }
}
4
Adrodoc55