-1

我创建了工件,并在启动程序时收到错误 Class com.abstudio.fakture.MainActivity not found。当我通过 IDE 运行程序时,它一切正常。

IDE:Intelij IDEA JavaFX Java 8

清单文件:

Manifest-Version: 1.0
Main-Class: com.abstudio.fakture.MainActivity

MainActivity 在路径中:src/main/java/com/abstudio/fakture/MainActivity

在 cmd 中运行命令“jar tf ePDV.jar”时,我看到 com/abstudio/fakture/MainActivity 路径是用其他类、接口等编译的。

我的 build.gradle 文件:

plugins {
    id 'java'
    id 'application'
    id 'idea'
}
sourceCompatibility = JavaVersion.VERSION_1_8
group 'org.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}
compileJava.options.encoding = 'UTF-8'
tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}
jar {
    manifest {
        attributes(
                'Main-Class': 'com.abstudio.fakture.MainActivity'
        )
    }
}
sourceSets.main {
    java {
        srcDir 'src/main/java' //assume that your source codes are inside this path
    }
    resources {
        srcDirs = ['src/main/java', 'src/main/resources']
        exclude "**/*.java"
    }
}


dependencies {
    testImplementation group: 'junit', name: 'junit', version: '4.12'
    implementation 'com.jfoenix:jfoenix:8.0.10'
    implementation group: 'de.jensd', name: 'fontawesomefx', version: '8.1'
    // https://mvnrepository.com/artifact/mysql/mysql-connector-java
    implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.22'
    // https://mvnrepository.com/artifact/com.itextpdf/itextpdf
    implementation group: 'com.itextpdf', name: 'itextpdf', version: '5.5.13.2'

    implementation group: 'org.apache.derby', name: 'derby', version: '10.14.1.0'
// https://mvnrepository.com/artifact/org.controlsfx/controlsfx
    implementation group: 'org.controlsfx', name: 'controlsfx', version: '8.40.18'

    implementation 'org.apache.commons:commons-configuration2:2.7'
    implementation 'commons-io:commons-io:2.11.0'
    implementation 'commons-net:commons-net:3.8.0'



}
mainClassName = 'com.abstudio.fakture.MainActivity'

在项目结构中应用程序类是 com.abstudio.fakture.MainActivity

人工制品和清单

工件 JavaFX

编译类

如何解决这个问题呢?谢谢

4

1 回答 1

0

解决此问题的一种方法是使用替代方法从头开始。

这不是一件容易的事,但如果你能做到的话,可能会得到一个不错的结果:

  1. 使用 IDE创建一个新的 JavaFX 项目。
  2. 使用最新的软件,JDK 17.0.2 和 JavaFX 17.0.2 和 jfoenix 9,字体 awesomefx 9,以及其他软件的最新版本。
  3. 使用 Maven 而不是 Gradle 来构建项目,因为除非您真的知道自己在做什么,否则它会更容易。
  4. 将现有代码复制到向导创建的项目中,然后重新导入更新的 maven pom 以同步所有依赖项。
  5. 更新 module-info.Java 文件以定义您的应用程序模块要求,
  6. 您定义的大多数库的最新版本将是模块化和可链接的,不是您需要修补以添加模块信息的库。
  7. 如果模块化工作太困难,请删除模块信息并按照JPackageScriptFX的说明进行操作。
  8. 测试和调试,直到它工作。
  9. 不要创建包含 JavaFX 的胖 jar。
  10. 通过 openjfx-maven-plugin 使用 jlink zip 格式或使用 jpackage 使用 JPackageScriptFX 打包应用程序。

因为您正在共享类似的库,另请参阅:

其中包含有关要使用的库版本和推荐的开发方法的信息(答案中的很多信息都与您相关,无论您是否使用 SceneBuilder)。

于 2022-02-06T03:05:12.560 回答