java - Gradle - 来自单个项目的多个 Jar

标签 java gradle build.gradle executable-jar

上下文:从单个项目创建多个可执行 jar - 多包 gradle 项目

问题:我引用 Link 中提供的解决方案,这有助于在 build->libs 文件夹中生成 jar,但是当我尝试执行 jar 时没有任何 react

注:即使我使包名与 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 文件(下面的相关部分,按照上面的链接休息):
artifacts {
    archives jarPackage("pkgCalculator", "1.0"),
            jarPackage("pkgScale","1.0"),
            jarPackage("pkgMusicPlayer","1.0"),
            jarPackage("pkgVideoPlayer","1.0")

}

最佳答案

与@iCoder 讨论后,问题的第一部分已解决:jarPackage函数不能“按原样”重用,必须进行调整以支持通用类/包布局:

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 如果尚未修复,您应该针对该剩余问题打开另一个问题。

关于java - Gradle - 来自单个项目的多个 Jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52839439/

相关文章:

Android Studio 3.0 Beta 1 : Failed to resolve: com. android.support :multidex:1. 0.2

grails - Grails 3 set-version替换

java - H2数据库中@GenerateValue的问题

java - Eclipse 3.4.2 在 Mac OSX 上编译 Java 1.6

Java Hibernate Validator 需要一个或另一个

android - Gradle同步失败:在未定义特定主类的情况下无法启动守护进程

java - 在 Dijkstra 算法中使用哪种数据类型作为队列?

android - Android Studio-无法解析com.android.tools.build:gradle:3.5.2

android - 编写gradle任务以添加新的Android产品版本的规范方法

android - Android Studio创建带有空白页面的新项目,该页面显示错误gradle “myapplication3”项目刷新失败