[英]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)一起分發,該文件列出了傳遞依賴項,但不一定打包為“存儲庫”。 請參閱下圖以查看我所指的內容:
請注意,我計划分發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.