Error: Could not find or load main class org.ws.Main

Signaler
-
 newtresor -
Bonjour,

Je suis bloquer depuis 4 jours sur un projet et j'arrive pas à évoluer.
Je travail en java-fx gradle avec intellij, après avoir terminer j'essai de construire un jar image avec 'org.beryx.jlink' version '2.23.1' jusque-la tout va bien seulement lorsque j'execute le jar produit par jlink j'ai l'erreur suivante :

Error: Could not find or load main class org.ws.Main
Caused by: java.lang.NoClassDefFoundError: javafx/application/Application


Voici mon build.gradle :

plugins {
id 'java'
id 'application'
id 'org.openjfx.javafxplugin' version '0.0.9'
id 'org.beryx.jlink' version '2.23.1'
}

group 'org.ws'
version '1.0'
mainClassName = 'org.ws.Main'


repositories {
mavenCentral()
mavenLocal()
}

dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}

javafx {
version = "15.0.1"
modules = ['javafx.controls', 'javafx.fxml', 'javafx.base']
}

jar {
doLast {
project.exec {
workingDir destinationDirectory.get()
executable 'jar'
args '--update'
args '--file', archiveFileName.get()
args '--main-class', mainClassName
args '.'
}
}
}

jlink {
addOptions('--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages')
launcher {
name = 'start-app'
customImage {
appModules = [

]
}
jvmArgs = [
'-Dlog4j.debug=true', '-Dlog4j.configurationFile={{BIN_DIR}}/log4j2.xml',
// '--add-reads', 'group.merged.module=mod',
'-cp', '../app/*'
]
}
secondaryLauncher {
name = 'my-additional-app'
mainClass = mainClassName
args = ['--user', 'WinnerGroup']
}
mergedModule {
additive = true
//uses 'ch.qos.logback.classic.spi.Configurator'
}
customImage {
jdkModules = ['java.desktop', 'java.xml', 'jdk.unsupported']
appModules = ['javafx.controls', 'javafx.fxml', 'javafx.base']
}
jpackage {
jpackageHome = 'C:\\Program Files\\Java\\jdk-14.0.2'
outputDir = 'my-packaging'
imageName = 'start-app'
//skipInstaller = true
installerName = 'start-app'
installerType = 'exe'
}
forceMerge('log4j-api')
}
/*
tasks.jlink.doLast {
copy {
from('src/main/resources')
into("$buildDir/image/bin")
}
copy {
from 'C:\\JavaFXSDK\\javafx-sdk-15.0.1\\bin\\glass.dll',
'C:\\JavaFXSDK\\javafx-sdk-15.0.1\\bin\\javafx_font.dll',
'C:\\JavaFXSDK\\javafx-sdk-15.0.1\\bin\\prism_d3d.dll',
'C:\\JavaFXSDK\\javafx-sdk-15.0.1\\bin\\prism_sw.dll'
into("$buildDir/image/bin")
}
}
  • /


Merci d'avance pour votre aide

Configuration: Windows / Chrome 88.0.4324.150

2 réponses

Messages postés
16249
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 février 2021
2 796
Bonjour,

Vu ta configuration, tu fais du JDK 14, mais JLink n'existe plus depuis Java 13, il a été remplacé par JPackage en Java 14.
Dans le plugin Beryx que tu utilises il y a une tâche jpackage, à voir s'il ne faudrait pas l'utiliser à la place de la tâche jlink.
https://badass-jlink-plugin.beryx.org
Merci pour votre réponse.
Entre-temps j'ai bidouillé en migrant vers maven.
J'ai ajouter la configuration suivante :

<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.3</version>
<configuration>
<mainClass>org.ws.App</mainClass>
<launcher>launch.sh</launcher>
<compress>2</compress>
<jlinkZipName>cms-app</jlinkZipName>
<jlinkImageName>cms-app</jlinkImageName>
<noManPages>true</noManPages>
<noHeaderFiles>true</noHeaderFiles>
<options>
<option>--add-opens</option>
<option>java.base/java.lang.reflect=com.jfoenix</option>
<option>--add-exports</option>
<option>javafx.controls/com.sun.javafx.scene.control.behavior=com.jfoenix</option>
<option>--add-exports</option>
<option>javafx.controls/com.sun.javafx.scene.control=com.jfoenix</option>
<option>--add-exports</option>
<option>javafx.base/com.sun.javafx.binding=com.jfoenix</option>
<option>--add-exports</option>
<option>javafx.graphics/com.sun.javafx.stage=com.jfoenix</option>
<option>--add-exports</option>
<option>javafx.base/com.sun.javafx.event=com.jfoenix</option>
<option>--add-exports</option>
<option>javafx.base/com.sun.javafx.event=org.controlsfx.controls</option>
</options>


Ca marche bien seulement il me reste d'indiquer à jlink de tout transformer en package native. C'est là que je suis coincé.
En plus il prend pas en charge les librairies non modulaire.

Avez une idée ?