[英]How to programmatically exclude top level packages from src/java in gradle?
我有一個包含大約 100 個頂級包的項目。 我希望能夠為其中一些頂級封裝制作 jar。 下面的代碼找到了頂級包,但我實際上如何進行排除,所以我只得到一個?
把它概括一下會很好,這樣它就可以與不在頂層的包一起工作。
sourceSets {
List<String> folders=new LinkedList<>()
String target="r"
for(String path:main.java.srcDirs)
for(String name:new File(path).list())
if(!name.equals(target))
if(new File(path,name).isDirectory())
folders.add(name)
println("how to exclude these folders: "+folders)
}
在一個空目錄中,您可以使用以下腳本創建源設置的模擬:
def dir = new File('src/main/java')
['a', 'b', 'c', 'd', 'e'].each { l1 ->
['x', 'y', 'z', 'r', 'v'].each { l2 ->
def f = new File(dir, "$l1/$l2/SampleClass.java")
f.parentFile.mkdirs()
f.text = """\
package ${l1}.${l2};
class SampleClass {
}
""".stripIndent()
}
}
它在運行時會生成以下內容:
─➤ groovy write.groovy
─➤ find src/main/java -type f | sort
src/main/java/a/r/SampleClass.java
src/main/java/a/v/SampleClass.java
src/main/java/a/x/SampleClass.java
src/main/java/a/y/SampleClass.java
src/main/java/a/z/SampleClass.java
src/main/java/b/r/SampleClass.java
src/main/java/b/v/SampleClass.java
src/main/java/b/x/SampleClass.java
src/main/java/b/y/SampleClass.java
src/main/java/b/z/SampleClass.java
src/main/java/c/r/SampleClass.java
src/main/java/c/v/SampleClass.java
src/main/java/c/x/SampleClass.java
src/main/java/c/y/SampleClass.java
src/main/java/c/z/SampleClass.java
src/main/java/d/r/SampleClass.java
src/main/java/d/v/SampleClass.java
src/main/java/d/x/SampleClass.java
src/main/java/d/y/SampleClass.java
src/main/java/d/z/SampleClass.java
src/main/java/e/r/SampleClass.java
src/main/java/e/v/SampleClass.java
src/main/java/e/x/SampleClass.java
src/main/java/e/y/SampleClass.java
src/main/java/e/z/SampleClass.java
─➤
在此目錄樹的根目錄中使用以下build.gradle
:
apply plugin: 'java'
task jara(type: Jar) {
archiveBaseName = 'jara'
from jar.source
include 'a/**/*'
}
task jarb(type: Jar) {
archiveBaseName = 'jarb'
from jar.source
include 'b/**/*'
}
artifacts {
archives jara, jarb
}
然后你可以運行:
─➤ gradle clean build
BUILD SUCCESSFUL in 509ms
生成:
─➤ ls -1 build/libs
groovy-how-to-programmatically-exclude-top-level-packages-from-src-java-in-gradle.jar
jara.jar
jarb.jar
─➤ unzip -l build/libs/jara.jar
Archive: build/libs/jara.jar
Length Date Time Name
--------- ---------- ----- ----
0 2020-12-21 15:56 META-INF/
25 2020-12-21 15:56 META-INF/MANIFEST.MF
0 2020-12-21 15:56 a/
0 2020-12-21 15:56 a/r/
266 2020-12-21 15:56 a/r/SampleClass.class
0 2020-12-21 15:56 a/y/
266 2020-12-21 15:56 a/y/SampleClass.class
0 2020-12-21 15:56 a/z/
266 2020-12-21 15:56 a/z/SampleClass.class
0 2020-12-21 15:56 a/x/
266 2020-12-21 15:56 a/x/SampleClass.class
0 2020-12-21 15:56 a/v/
266 2020-12-21 15:56 a/v/SampleClass.class
--------- -------
1355 13 files
─➤ unzip -l build/libs/jarb.jar
Archive: build/libs/jarb.jar
Length Date Time Name
--------- ---------- ----- ----
0 2020-12-21 15:56 META-INF/
25 2020-12-21 15:56 META-INF/MANIFEST.MF
0 2020-12-21 15:56 b/
0 2020-12-21 15:56 b/r/
266 2020-12-21 15:56 b/r/SampleClass.class
0 2020-12-21 15:56 b/y/
266 2020-12-21 15:56 b/y/SampleClass.class
0 2020-12-21 15:56 b/z/
266 2020-12-21 15:56 b/z/SampleClass.class
0 2020-12-21 15:56 b/x/
266 2020-12-21 15:56 b/x/SampleClass.class
0 2020-12-21 15:56 b/v/
266 2020-12-21 15:56 b/v/SampleClass.class
--------- -------
1355 13 files
─➤
即兩個 jar 文件,一個包含來自頂層 package 的所有類,一個包含來自a
頂層b
的所有類。
不確定這是否會擊中您的目標方格,但它應該讓您了解如何完成您想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.