40

多くのプロジェクトで特定のフィルターを再利用したいので、それを抽出し、単一の jar を使用して Web アプリに追加するだけです。

ビルドには、Gradle 1.3 と次のbuild.gradleファイルを使用しています。

apply plugin: 'java'

dependencies {

    compile group:'org.slf4j', name:'slf4j-api', version:'1.7.+'

    testCompile group:'junit', name:'junit', version:'4.+'

    compile group:'org.springframework', name:'spring-web', version:'3.+'   

    compile group:'org.slf4j', name:'slf4j-log4j12', version:'1.6.+'
    compile group:'log4j', name:'log4j', version:'1.2.+'

    providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version:'3.+'        

}

repositories {

    mavenCentral()

}

ご覧のとおり、このフィルターを正常にコンパイルするにはサーブレット API が必要なので、Maven が提供する依存関係のように追加したいと考えています。

とにかく、実行後gradle build、次のエラーが発生します。

ルート プロジェクト 'hibernate-conversation-context' で、引数 [{group=javax.servlet, name=javax.servlet-api, version=3.+}] のメソッド providedCompile() が見つかりませんでした。

これで、WAR プラグインなしでは providedCompile を使用できないことがわかりましたが、プロジェクトを単純な JAR にする必要があります。これを行う別の方法はありますか?

4

7 に答える 7

54

javaプラグインのすぐに使えるそのような構成はありません。ただし、次のように自分でビルドできます。

configurations { providedCompile }

dependencies {
    providedCompile "javax.servlet:javax.servlet-api:3.+"
}

sourceSets.main.compileClasspath += configurations.providedCompile
sourceSets.test.compileClasspath += configurations.providedCompile
sourceSets.test.runtimeClasspath += configurations.providedCompile

これにより、構成が追加され、すべての依存関係がメイン クラスとテスト クラスの両方のコンパイル クラスパスに配置されます。また、gradle DSL ドキュメントによるとコンパイル クラスパスが含まれていないため、runtimeClasspath にも追加する必要があります。

于 2012-12-18T12:21:24.513 に答える
14

SpringSourceの Gradle プラグインpropdeps を見てください。プロジェクトの説明から:

Maven POM 生成サポートとともに、Gradle の追加のオプションおよび提供された依存関係構成を提供します。

于 2013-01-04T21:13:55.163 に答える
6

私は最近、まさにこのシナリオをカバーするブログ投稿を書きました。また、Eclipseとの統合を適切に設定する方法も示します。

http://blog.codeaholics.org/2012/emulating-mavens-provided-scope-in​​-gradle/

于 2012-12-18T13:07:44.710 に答える
6

Gradle 2.12 を使用していることに気付いたら、'providedCompile' を 'compileOnly' に変更してください。

于 2016-03-18T15:42:44.083 に答える
5

もっと簡単な方法があります:

configurations {    
    provided
    provided.extendsFrom(compile)
}

そして、次のことができます:

dependencies {  
    provided group: 'javax.servlet', name: 'javax.servlet-api', version:'3.+' 
}

また、Eclipse または Idea の生成されたプロジェクト ファイルに、提供されたライブラリを含める必要があります。

idea.module.scopes.PROVIDED.plus += configurations.provided
eclipse.classpath.plusConfigurations += configurations.provided
于 2013-07-17T09:32:01.190 に答える
4

javadoc を機能させるには、これを追加する必要がありました。

javadoc.classpath=sourceSets.main.compileClasspath
于 2013-09-10T13:33:09.370 に答える