Hallo,
ich habe ein kleines Programm mit JavaFX und Spring entwickelt. Für dieses Programm nutze ich jetzt das erste Mal Gradle. Ich habe es geschafft das Programm mithilfe des Gradle Run Tasks in IntelliJ zum laufen zu bringen. Jetzt habe ich versucht daraus eine Jar zu machen. Die Jar wird auch fehlerfrei erzeugt, allerdings kann ich sie nicht starten. Dabei ist es egal, ob ich den Standard Build nehme, oder meinen "eigenen" fatJar Build. Ich bekomme folgenden Fehler, wenn ich die Jar ausführen möchte (Da kam noch ne ganze Menge vor, ich vermute aber, ich habe den wichtigen Teil erwischt. Falls nicht, einfach bescheid sagen):
/build/libs/Wochenplan.jar --> aufgerufen aus dem Ordner selbst mit java -jar Wochenplan.jar
Meine Gradle Datei sieht so aus:
Interessant finde ich folgendes: Ich habe das Programm auf einem Mac entwickelt und in der Entwicklungsumgebung auf dem Mac läuft es einwandfrei. Versuche ich es auf dem Mac die jar direkt wie oben beschrieben aufzurufen, oder führe ich das Script aus, das unter /build/distributions bereitgestellt wird aus, erhalte ich die Fehlermeldung.
Führe ich das unter Windows aus, läuft es einwandfrei. Es braucht ewig zum Starten und selbst in der Entwicklungsumgebung inkl. Kompilieren bin startet das Programm in einem Bruchteil der Zeit, aber es startet immerhin.
Kann mir jemand sagen, was ich falsch gemacht habe, dass das Programm auf dem Mac nicht läuft? Vielleicht sieht ja noch jemand, wo mein Fehler liegt, dass es so lange zum Starten braucht, aber das Problem ist vorerst nebensächlich...
Vielen Dank im Voraus
eldrior
edit:
wenn ich den fatJar Task starte und dort die Jar starte, bekomme ich einen anderen Fehler:
ich habe ein kleines Programm mit JavaFX und Spring entwickelt. Für dieses Programm nutze ich jetzt das erste Mal Gradle. Ich habe es geschafft das Programm mithilfe des Gradle Run Tasks in IntelliJ zum laufen zu bringen. Jetzt habe ich versucht daraus eine Jar zu machen. Die Jar wird auch fehlerfrei erzeugt, allerdings kann ich sie nicht starten. Dabei ist es egal, ob ich den Standard Build nehme, oder meinen "eigenen" fatJar Build. Ich bekomme folgenden Fehler, wenn ich die Jar ausführen möchte (Da kam noch ne ganze Menge vor, ich vermute aber, ich habe den wichtigen Teil erwischt. Falls nicht, einfach bescheid sagen):
/build/libs/Wochenplan.jar --> aufgerufen aus dem Ordner selbst mit java -jar Wochenplan.jar
18:38:04.859 [main] DEBUG org.hibernate.integrator.internal.IntegratorServiceImpl - Adding Integrator [org.hibernate.cfg.beanvalidation.BeanValidationIntegrator].
18:38:04.861 [main] DEBUG org.hibernate.integrator.internal.IntegratorServiceImpl - Adding Integrator [org.hibernate.secure.spi.JaccIntegrator].
18:38:04.863 [main] DEBUG org.hibernate.integrator.internal.IntegratorServiceImpl - Adding Integrator [org.hibernate.cache.internal.CollectionCacheInvalidator].
18:38:04.863 [main] DEBUG org.hibernate.integrator.internal.IntegratorServiceImpl - Adding Integrator [org.hibernate.jpa.event.spi.JpaIntegrator].
18:38:04.938 [main] INFO org.hibernate.Version - HHH000412: Hibernate Core {5.0.12.Final}
18:38:04.940 [main] INFO org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found
18:38:04.941 [main] INFO org.hibernate.cfg.Environment - HHH000021: Bytecode provider name : javassist
18:38:04.955 [main] DEBUG org.hibernate.service.spi.ServiceBinding - Overriding existing service binding [org.hibernate.secure.spi.JaccService]
18:38:04.972 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Retrieved dependent beans for bean 'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#28eaa59a': [entityManagerFactory]
18:38:04.972 [main] WARN org.springframework.context.support.ClassPathXmlApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [spring.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
18:38:04.972 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@68999068: defining beans [customerRepositoryImpl,employeeRepositoryImpl,myOrderRepositoryImpl,weekDetailRepositoryImpl,weekTextRepositoryImpl,customerServiceImpl,employeeServiceImpl,orderServiceImpl,weekServiceImpl,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,org.springframework.context.event.internalEventListenerProcessor,org.springframework.context.event.internalEventListenerFactory,employeeService,weekService,dataSource,entityManagerFactory,transactionManager,org.springframework.transaction.config.internalTransactionalEventListenerFactory,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor]; root of factory hierarchy
Exception in thread "main" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [spring.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1078)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:857)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at de.mycompany.wochenplan.Main.main(Main.java:47)
... 8 more
Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
at org.hibernate.boot.spi.XmlMappingBinderAccess.<init>(XmlMappingBinderAccess.java:43)
at org.hibernate.boot.MetadataSources.<init>(MetadataSources.java:87)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:179)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:149)
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:54)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:353)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:370)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:359)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
... 20 more
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:466)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:563)
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:94)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
... 30 more
18:38:04.861 [main] DEBUG org.hibernate.integrator.internal.IntegratorServiceImpl - Adding Integrator [org.hibernate.secure.spi.JaccIntegrator].
18:38:04.863 [main] DEBUG org.hibernate.integrator.internal.IntegratorServiceImpl - Adding Integrator [org.hibernate.cache.internal.CollectionCacheInvalidator].
18:38:04.863 [main] DEBUG org.hibernate.integrator.internal.IntegratorServiceImpl - Adding Integrator [org.hibernate.jpa.event.spi.JpaIntegrator].
18:38:04.938 [main] INFO org.hibernate.Version - HHH000412: Hibernate Core {5.0.12.Final}
18:38:04.940 [main] INFO org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found
18:38:04.941 [main] INFO org.hibernate.cfg.Environment - HHH000021: Bytecode provider name : javassist
18:38:04.955 [main] DEBUG org.hibernate.service.spi.ServiceBinding - Overriding existing service binding [org.hibernate.secure.spi.JaccService]
18:38:04.972 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Retrieved dependent beans for bean 'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#28eaa59a': [entityManagerFactory]
18:38:04.972 [main] WARN org.springframework.context.support.ClassPathXmlApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [spring.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
18:38:04.972 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@68999068: defining beans [customerRepositoryImpl,employeeRepositoryImpl,myOrderRepositoryImpl,weekDetailRepositoryImpl,weekTextRepositoryImpl,customerServiceImpl,employeeServiceImpl,orderServiceImpl,weekServiceImpl,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,org.springframework.context.event.internalEventListenerProcessor,org.springframework.context.event.internalEventListenerFactory,employeeService,weekService,dataSource,entityManagerFactory,transactionManager,org.springframework.transaction.config.internalTransactionalEventListenerFactory,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor]; root of factory hierarchy
Exception in thread "main" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [spring.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1078)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:857)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at de.mycompany.wochenplan.Main.main(Main.java:47)
... 8 more
Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
at org.hibernate.boot.spi.XmlMappingBinderAccess.<init>(XmlMappingBinderAccess.java:43)
at org.hibernate.boot.MetadataSources.<init>(MetadataSources.java:87)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:179)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:149)
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:54)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:353)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:370)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:359)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
... 20 more
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:466)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:563)
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:94)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
... 30 more
Meine Gradle Datei sieht so aus:
Java:
buildscript {
ext {
springBootVersion = '1.5.7.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
group 'de.my-company'
version '1.0-SNAPSHOT'
apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
mainClassName = 'de.mycompany.wochenplan.Main'
sourceCompatibility = 1.8
task fatJar(type: Jar) {
manifest {
attributes 'Implementation-Title': 'Wochenplan',
'Implementation-Version': version,
'Main-Class': 'org.springframework.boot.loader.JarLauncher',
'Start-Class': 'de.mycompany.wochenplan.Main'
}
baseName = project.name + '-all'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
//compileOnly "org.projectlombok:lombok"
compile('org.springframework.boot:spring-boot-starter-data-jpa')
runtime('mysql:mysql-connector-java')
compileOnly('org.projectlombok:lombok')
testCompile('org.springframework.boot:spring-boot-starter-test')
//PDF:
compile group: 'com.itextpdf', name: 'itextpdf', version: '5.0.6'
}
sourceSets {
main.java.srcDir "src/main/java"
main.resources.srcDir "src/main/resources"
}
Interessant finde ich folgendes: Ich habe das Programm auf einem Mac entwickelt und in der Entwicklungsumgebung auf dem Mac läuft es einwandfrei. Versuche ich es auf dem Mac die jar direkt wie oben beschrieben aufzurufen, oder führe ich das Script aus, das unter /build/distributions bereitgestellt wird aus, erhalte ich die Fehlermeldung.
Führe ich das unter Windows aus, läuft es einwandfrei. Es braucht ewig zum Starten und selbst in der Entwicklungsumgebung inkl. Kompilieren bin startet das Programm in einem Bruchteil der Zeit, aber es startet immerhin.
Kann mir jemand sagen, was ich falsch gemacht habe, dass das Programm auf dem Mac nicht läuft? Vielleicht sieht ja noch jemand, wo mein Fehler liegt, dass es so lange zum Starten braucht, aber das Problem ist vorerst nebensächlich...
Vielen Dank im Voraus
eldrior
edit:
wenn ich den fatJar Task starte und dort die Jar starte, bekomme ich einen anderen Fehler:
java -jar Wochenplan-all-1.0-SNAPSHOT.jar
Fehler: Hauptklasse org.springframework.boot.loader.JarLauncher konnte nicht gefunden oder geladen werden
Ursache: java.lang.ClassNotFoundException: org.springframework.boot.loader.JarLauncher
Fehler: Hauptklasse org.springframework.boot.loader.JarLauncher konnte nicht gefunden oder geladen werden
Ursache: java.lang.ClassNotFoundException: org.springframework.boot.loader.JarLauncher