Gradle - несколько банок из одного проекта - PullRequest
0 голосов
/ 16 октября 2018

Контекст: Чтобы создать несколько исполняемых jar-файлов из одного проекта - проект с несколькими пакетами

Проблема: Я ссылаюсь на решение, предоставленное в Ссылка, это помогает в создании jar в папке build-> libs, но когда я пытаюсь выполнить 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 (соответствующая часть ниже, остальные по ссылке выше):

artifacts {
    archives jarPackage("pkgCalculator", "1.0"),
            jarPackage("pkgScale","1.0"),
            jarPackage("pkgMusicPlayer","1.0"),
            jarPackage("pkgVideoPlayer","1.0")

}

1 Ответ

0 голосов
/ 18 октября 2018

После обсуждения с @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, вам следует открыть еще один вопрос для этой оставшейся проблемы, если она еще не устранена.

...