Gradle - 来自单个项目的多个 Jar
Gradle - Multiple Jar from single project
上下文: 从单个项目创建多个可执行 jar - 多个包 gradle 项目
问题:我参考了中提供的解决方案,这有助于在build->libs文件夹中生成jar,但是当我尝试执行jar时什么都没发生
注意:即使我把包名和java文件名一样,生成的jar也不会执行。
我还注意到所有生成的 jar 文件的大小都是一样的。希望所面临的问题是明确的,并等待关于我在哪里犯错的意见。
我的项目结构(说明目的):
ProjectA
-src
--main
---java
----pkg1
-----pkgCalculator
------Calculator.java
-----pkgScale
------Scale.java
----pkg2
-----pkgMusicPlayer
------MusicPlayer.java
-----pkgVideoPlayer
------VideoPlayer.java
---resources
----fxml
----css
--test
---java
---resources
Gradle文件(下面相关部分,其余按上面link):
artifacts {
archives jarPackage("pkgCalculator", "1.0"),
jarPackage("pkgScale","1.0"),
jarPackage("pkgMusicPlayer","1.0"),
jarPackage("pkgVideoPlayer","1.0")
}
在与@iCoder 讨论后,问题的第一部分已解决:jarPackage
函数无法重用 "as is",必须进行调整以支持泛型 class/package布局:
def jarPackage(String jarName, String className, artifactVersion) {
if (artifactVersion == "" || artifactVersion == null) {
artifactVersion = "1.0.0"
}
return tasks.create("jar${jarName}", Jar) {
baseName = jarName
version = artifactVersion
def String pkgName = className.substring(0, className.lastIndexOf("."))
def String pkgDir = pkgName.replaceAll("\.", "/")
def String clazzName = className.substring( className.lastIndexOf(".") +1 )
from(sourceSets.main.output) {
include "$pkgDir//**"
}
from {
configurations.compile.collect {
it.isDirectory() ? it : zipTree(it)
}
}
manifest {
attributes "Implementation-Title": "$clazzName",
"Implementation-Version": "$version",
"Main-Class": "$pkgName.$clazzName"
}
}
}
artifacts {
archives jarPackage("calculator", "pkg1.pkcalculator.Calculator" , "1.0.0")
}
另一个问题仍然存在,与 Gradle 无关,但与 JDK 11 链接问题有关:@iCoder 如果尚未解决,您应该针对剩余的问题打开另一个问题。
上下文: 从单个项目创建多个可执行 jar - 多个包 gradle 项目
问题:我参考了
注意:即使我把包名和java文件名一样,生成的jar也不会执行。
我还注意到所有生成的 jar 文件的大小都是一样的。希望所面临的问题是明确的,并等待关于我在哪里犯错的意见。
我的项目结构(说明目的):
ProjectA
-src
--main
---java
----pkg1
-----pkgCalculator
------Calculator.java
-----pkgScale
------Scale.java
----pkg2
-----pkgMusicPlayer
------MusicPlayer.java
-----pkgVideoPlayer
------VideoPlayer.java
---resources
----fxml
----css
--test
---java
---resources
Gradle文件(下面相关部分,其余按上面link):
artifacts {
archives jarPackage("pkgCalculator", "1.0"),
jarPackage("pkgScale","1.0"),
jarPackage("pkgMusicPlayer","1.0"),
jarPackage("pkgVideoPlayer","1.0")
}
在与@iCoder 讨论后,问题的第一部分已解决:jarPackage
函数无法重用 "as is",必须进行调整以支持泛型 class/package布局:
def jarPackage(String jarName, String className, artifactVersion) {
if (artifactVersion == "" || artifactVersion == null) {
artifactVersion = "1.0.0"
}
return tasks.create("jar${jarName}", Jar) {
baseName = jarName
version = artifactVersion
def String pkgName = className.substring(0, className.lastIndexOf("."))
def String pkgDir = pkgName.replaceAll("\.", "/")
def String clazzName = className.substring( className.lastIndexOf(".") +1 )
from(sourceSets.main.output) {
include "$pkgDir//**"
}
from {
configurations.compile.collect {
it.isDirectory() ? it : zipTree(it)
}
}
manifest {
attributes "Implementation-Title": "$clazzName",
"Implementation-Version": "$version",
"Main-Class": "$pkgName.$clazzName"
}
}
}
artifacts {
archives jarPackage("calculator", "pkg1.pkcalculator.Calculator" , "1.0.0")
}
另一个问题仍然存在,与 Gradle 无关,但与 JDK 11 链接问题有关:@iCoder 如果尚未解决,您应该针对剩余的问题打开另一个问题。