2018年8月11日 星期六

Project 的依賴 (Gradle 4.x 五)

官網依賴連結
官網 repository 連結

buildscript { ScriptHandler sh ->
    sh.repositories { RepositoryHandler rh ->
        rh.jcenter()
        rh.mavenLocal()
        rh.mavenCentral()
    
        rh.maven { MavenArtifactRepository mar ->
            mar.url "http://repo.mycompany.com/maven2"
            mar.credentials { PasswordCredentials pc ->
                pc.username "user"
                pc.password "password"
            }
        }
    }
    
    sh.dependencies {
        classpath group: 'junit', name: 'junit', version: '4.12'
    }
}

※這是還不熟練的寫法,可以將閉包參數去掉,因為已經有預設 import 了



buildscript {
    repositories {
        jcenter()
        mavenLocal()
        mavenCentral()
    
        maven {
            url "http://repo.mycompany.com/maven2"
            credentials {
                username "user"
                password "password"
            }
        }
    }
    
    dependencies {
        classpath project(':subGradle1') // 依賴其他專案
        classpath fileTree(includes: ['*.jar', '*.war'], dir: 'libs')
    }
}

※在 buildscript 同層,也有 repositories 和 dependencies
寫在 buildscript 裡是針對寫 gradle 時用的 jar 包; 寫在 buildscript 同層是針專案要用的 jar 包

Could not find method xxx() for arguments:不寫 classpath 會出的錯
Cannot resolve external dependency xxx because no repositories are defined:在buildscript 裡沒有repositories 出現的錯

※依賴裡,舊版的
https://docs.gradle.org/4.10.3/userguide/building_java_projects.html
https://docs.gradle.org/5.6.4/userguide/building_java_projects.html
https://docs.gradle.org/current/userguide/java_library_plugin.html

4~6 版
compileOnly
implementation (取代 compile)
runtimeOnly (取代 runtime)
testCompileOnly
testImplementation
testRuntimeOnly

只有第 6 版有
api



※依賴衝突


maven 的依賴是最短路徑優先,路徑一樣就是先寫的優先
gradle 則是最新的版本優先
以 hibernate 3.6.3 為例,有以下三種方法

configurations.all {
    resolutionStrategy {
        failOnVersionConflict() // 不要自動處理版本衝突
    }
}



configurations.all {
    resolutionStrategy {
        force 'org.slf4j:slf4j-api:1.7.24' // 強制使用某一個版本
    }
}



dependencies {
    implementation (group: 'org.hibernate', name: 'hibernate-core', version: '3.6.3.Final') {
        exclude group:"org.slf4j" , module:"slf4j-api" // 排除依賴後,還要自己在下載
        // transitive=false // 所有依賴都不要,debug 用
    }
}

沒有留言:

張貼留言