簡體   English   中英

我如何告訴Gradle包含一個本地庫jar,而這個jar又具有依賴性?

[英]How do I tell Gradle to include a local library jar that in turn has dependencies?

當我閱讀Gradle文檔時,我肯定遺漏了一些東西,因為這感覺就像一個常見的用例。 基本上,我有兩個項目 - MyApp和MyLib。 MyApp將使用MyLib.jar作為依賴項。 反過來,MyLib有自己的依賴jar - 在構建時,MyLib的build.gradle指定了這些。 最后,MyLib.jar將只包含非依賴.class文件,因此MyApp將在某種程度上需要在編譯時下載MyLib.jar的依賴項。

如何告訴MyApp的build.gradle包含MyLib.jar然后下載MyLib的依賴jar而不在MyApp的build.gradle中指定這些jar? 我覺得MyApp的build.gradle不應該知道傳遞依賴。 我理解通常,build.gradle將查看遠程Maven / Ivy倉庫並讀取相應的xml以下載相應的傳遞依賴項,但我不想將MyLib上載到Maven / Ivy存儲庫。 理想情況下,我想將MyLib.jar與一些描述符文件(例如pom.xml)一起分發,該文件列出了傳遞依賴項,但不一定打包為“存儲庫”。 請參閱下圖以查看我所指的內容:

庫jar依賴項

請注意,我計划分發MyLib.jar,而不是作為一組源,而是作為一個封閉的jar,所以我不想設置多項目Gradle構建。 此外,MyLib的依賴關系可以在MavenCentral / etc存儲庫中找到,也可以在文件系統中與MyLib.jar一起找到。

您可以將庫發布到本地隔離的maven存儲庫,然后分發該存儲庫(例如,作為存檔),然后可以由gradle或maven使用。

注意:我正在使用gradle 2.11。

要為您的庫創建存儲庫,我們將使用gradle的maven-publish插件 您的庫的build.gradle將如下所示:

apply plugin: 'java'
apply plugin: 'maven-publish'

group = 'com.stackoverflow.phillip' // change it
version = '1.0' // whatever

dependencies {
    // ...
}

publishing {
    publications {
        maven(MavenPublication) {
            from components.java
            // uncomment if you want to change artifact id (the default equals to project directory name)
            //artifactId 'my-lib'
        }
    }

    repositories {
        maven {
            url 'file:local-repo' // path is relative to project root
        }
    }
}

運行gradle publish一個目錄local-repo 該目錄將是一個實際的maven存儲庫,只包含一個工件 - 您的庫。 當然,會有一個描述您的庫的依賴關系的pom

現在,您可以在另一個項目的build.gradle使用該存儲庫,例如:

repositories {
    mavenCentral()
    maven { url 'file:path/to/local-repo' } // path is relative to project root
}

dependencies {
    compile 'com.stackoverflow.phillip:my-lib:1.0'
}

暫無
暫無

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

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