首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Gradle + JavaFX和依赖项构建Java11项目

使用Gradle + JavaFX和依赖项构建Java11项目
EN

Stack Overflow用户
提问于 2020-04-27 02:53:05
回答 1查看 194关注 0票数 0

我正在尝试构建我的Java11项目,让它有一个可执行的jar (FatJar,SuperJar,不管它叫什么)或者一个EXE或者任何形式的可运行版本,甚至是一个批处理文件(使用应用程序)。我尝试的所有东西,要么是JavaFX丢失了,要么是我的依赖包不可见,错误就出来了。

这是我的build.gradle

代码语言:javascript
复制
plugins {
    id 'application'
    id 'java'
    id 'maven-publish'
    id 'org.openjfx.javafxplugin' version '0.0.8'
    id 'edu.sc.seis.launch4j' version '2.4.6'
    id 'org.beryx.jlink' version '2.12.0'
}

application {
    mainClassName = 'sassa.sassa.Main'
}


repositories {
    mavenLocal()
    maven {
        url = uri('https://jitpack.io')
    }

    maven {
        url = uri('https://repo.maven.apache.org/maven2')
    }
}

javafx {
    version = "11.0.2"
    modules = [ 'javafx.controls', 'javafx.fxml', 'javafx.graphics' ]
}

jlink {
    launcher {
        name = 'sassa'
    }
}

dependencies {
    implementation 'com.github.toolbox4minecraft:amidst:v4.4-beta1'
    implementation 'com.googlecode.json-simple:json-simple:1.1.1'
}

jar {
    manifest {
        attributes("Manifest-Version": "1.0",
                "Main-Class": "sassa.main.Main");
    }
}
compileJava {
    doFirst {
        println "CLASSPATH IS $classpath.asPath"
        options.compilerArgs = [
                '--module-path', classpath.asPath,
                '--add-modules', 'javafx.graphics',
                '--add-modules', 'javafx.controls',
                '--add-modules', 'javafx.fxml'
        ]
        classpath = files()
    }
}

task fatJar(type: Jar) {
    manifest.from jar.manifest
    classifier = 'all'
    from {
        configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) }
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    } {
        exclude "META-INF/*.SF"
        exclude "META-INF/*.DSA"
        exclude "META-INF/*.RSA"
    }
    with jar
}

launch4j {
    mainClassName = 'sassa.main.Main'
    icon = "${projectDir}/src/main/resources/sassa/sassa.ico"
    jreMinVersion = '11'
    jreMaxVersion = '14'
    jdkPreference = 'preferJre'
    initialHeapSize = 128
    maxHeapSize = 512
    stayAlive = false
    bundledJre64Bit = true
    dontWrapJar = true
    bundledJrePath = 'jre'
}

group = 'sassa'
version = '0.5.0'
sourceCompatibility = '11'

publishing {
    publications {
        maven(MavenPublication) {
            from(components.java)
        }
    }
}

此外,对于项目的布局,它在github上(我之前使用的是maven,但我认为Gradle可能工作得更好。( maven代码仍在github上) https://github.com/Zodsmar/SeedSearcherStandaloneTool/tree/development

从字面上讲,我已经尝试了所有的方法,但我似乎就是无法获得一个可构建的版本来分发……

此外,我已经阅读了有关module.info文件,我没有任何我想有一个简单的build.gradle,只包括我需要的一切,以建立一个可执行文件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-27 15:02:32

任何遇到这个问题并想知道我是怎么解决它的人。我创建了一个Gradle构建任务,然后能够构建Jars、EXE、Tar和Zip这就是gradle:

代码语言:javascript
复制
plugins {
    id 'application'
    id 'java'
    id 'maven-publish'
    id 'org.openjfx.javafxplugin' version '0.0.8'
    id 'edu.sc.seis.launch4j' version '2.4.6'
}

dependencies {
    implementation 'com.googlecode.json-simple:json-simple:1.1.1'
    implementation ('com.github.KaptainWutax:BiomeUtils:master-SNAPSHOT') {
        transitive = false;
        changing = true;
    }
    implementation ('com.github.KaptainWutax:FeatureUtils:master-SNAPSHOT')
    {
        transitive = false;
        changing = true;
    }
    implementation ('com.github.KaptainWutax:SeedUtils:master-SNAPSHOT')
    {
        transitive = false;
        changing = true;
    }
}


group = 'sassa'
version = 'v0.6.0'
sourceCompatibility = '1.8'
String stringVersion = version

javafx {
    version = "11.0.2"
    modules = [ 'javafx.controls', 'javafx.fxml', 'javafx.graphics' ]
}

application {
    mainClassName = 'sassa.main.Main'
}
jar {
    manifest {
        attributes 'Main-Class': 'sassa.main.Main'
    }
    from {
        configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) }
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

launch4j {
    mainClassName = 'sassa.main.Main'
    outfile = group + "-" + stringVersion + ".exe"
    icon = "${projectDir}/src/main/resources/sassa/sassa.ico"
}

repositories {
    mavenLocal()
    maven {
        url = uri('https://jitpack.io')
    }

    maven {
        url = uri('https://repo.maven.apache.org/maven2')
    }
}

task buildAll(type: GradleBuild) {
    tasks = ['jar', 'createExe', 'assemble']
}

publishing {
    publications {
        maven(MavenPublication) {
            from(components.java)
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61446316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档