簡體   English   中英

Gradle構建具有傳遞依賴項的多模塊項目

[英]Gradle build multi modules project with transitive dependencies

我在構建簡單的應用程序時遇到問題。 它包含3個模塊,ejb,休息和耳朵,應在其中包括休息。 為此,我將build.gradle編寫為以下內容之一。 但是我仍然有問題。 內置的耳朵看起來像:

ear-1.0.ear
|--ejbs-1.0.jar
|--rest-1.0.jar
|--lib
   |--ejbs-1.0.jar
   |--other libs..

如您所見,我在這里復制了ejbs-1.0.jar 我沒有想要的東西,所以我嘗試解決此問題。 我嘗試了兩種在網絡上找到的方法,但都沒有用。 第一個(帶有標簽1的注釋)從lib dir中排除了所有rest依賴項。 第二個(標簽2)做了同樣的事情,但還把rest-1.0.jar包含在lib中,這使它更糟。 現在,我不知道如何編寫build.gradle因此它將由子項目創建的jar放入根目錄,並將其依賴項放入lib dir。 我也嘗試用標簽3編寫類似注釋的內容,但這會使腳本失敗。 是否有簡單的方法可以使用類似的語法將其排除在外?

project(":ejbs") {
    apply plugin: "java"

    dependencies {
        compile group: 'javax.ejb', name: 'javax.ejb-api', version: '3.2'
        compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.2'
        compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.2'
    }
}

project(":rest") {
    apply plugin: "java"

    dependencies {

        compile project(':ejbs')
        compile group: 'javax.ejb', name: 'javax.ejb-api', version: '3.2'
        compile group: 'javax.ws.rs', name: 'jsr311-api', version: '0.11'
        compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.2'
        compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.2'
    }
}

project(":ear") {
    apply plugin: "java"
    apply plugin: "ear"

    dependencies {
        //1: def nonTransitive = {transitive = false}
        deploy project(":ejbs")
        deploy project(":rest")
        earlib project(path:":ejbs", configuration:"compile")
        earlib project(path:":rest", configuration:"compile")//1: , nonTransitive
        //2: add('earlib', project(':rest')) {
        //    transitive = false
        //}
        //3: earlib project(path:":rest", configuration:"compile") {
        //    exlude project(':ejbs')
        //}
    }
}

我終於找到了解決方案。 我是這樣寫的:

project(":ear") {
    apply plugin: "java"
    apply plugin: "ear"

    dependencies {
        deploy project(":ejbs")
        deploy project(":rest")
        earlib project(path:":ejbs", configuration:"compile")
        earlib(project(path:":rest", configuration:"compile")) {
            exclude module: 'ejbs'
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM