8

次のような戦争仕様のサブプロジェクトがあります。

war {
    from('resources')  {
        include '*.properties'
        into 'WEB-INF/classes/'
    }    
    webXml = file('src/main/webapp/WEB-INF/web.xml')
}

よく働く。Tomcat にデプロイ可能な単一のファット war ファイルを作成します。問題は、TomEE と JBoss にデプロイするときに競合が発生することです (つまり、Javax Servlet、Jersey などと)。したがって、一連の jar を戦争から除外したいと考えています。Gradle war documentation を見たところ、これには除外を使用する必要があるようです。私はそれを2つの異なる方法で試しましたが、瓶は戦争から除外されていません:

war {

    // copy properties file in classes so that 
    // they may be loaded from classpath
    from('resources')  {
        include '*.properties'
        into 'WEB-INF/classes/'
    }

    // specify web xml
    webXml = file('src/main/webapp/WEB-INF/web.xml')

    // remove jars that conflict with TomEE
    exclude '**/javax.inject-1.jar'
    exclude '**/javax.servlet-2.5.0.v201103041518.jar'
    exclude '**/servlet-api-2.5.jar'
    exclude '**/validation-api-1.0.0.GA.jar'

}

これは、github でホストされている NetFlix/karyon プロジェクト内のサブプロジェクト (karyon-examples) にあります。サブプロジェクトの依存関係は次のようになります。

dependencies {
    compile 'org.slf4j:slf4j-api:1.7.0'
    runtime 'org.slf4j:slf4j-simple:1.7.0'
    compile project(':karyon-extensions')
    compile project(':karyon-admin-web')
}

また、特に他のファイルやサブプロジェクトでは、コンパイルとランタイムの依存関係などを編集することは避けたいと考えています。実際、上で除外しようとしている jar は、jetty と通常の tomcat で実行する場合は良性です。

ビルド スクリプトを複雑にすることなく、これらの jar ファイルを除外したいだけです。私は何が欠けていますか?

ありがとう

4

2 に答える 2

9

明らかな方法は、戦争に持ちたくない依存関係をcompile構成から にprovidedCompile、または からruntimeに移動することprovidedRuntimeです。war プラグインが適用されると、提供された構成がビルドに追加されます。

上記のスニペットに関するもう 1 つの注意事項: 除外ステートメントでターゲット パスを参照する代わりに、/servlet-api-2.5.jar.

于 2013-04-05T20:33:26.477 に答える
0

あなたはこのようにすることができます

dependencies {
  compile fileTree(dir: 'WebContent/WEB-INF/lib', include: ['*.jar'])
  compile("org.apache.tomcat:tomcat-jni:8.0.37")
  providedRuntime("org.apache.tomcat:tomcat-jni:8.0.37")

}

于 2016-10-28T06:13:52.940 に答える