# Gradle Build



## eldrior (7. Dez 2017)

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


Spoiler: Fehlermeldung



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



Meine Gradle Datei sieht so aus:



Spoiler: build.gradle





```
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:



Spoiler: Fehler fatJar



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


----------



## olfibits (25. Dez 2017)

Hallo!
Falls du noch Hilfe brauchst: Das Problem auf dem Mac ist wie angegeben, dass die Klasse nicht gefunden wurde.
Bitte zippe doch mal dein Projekt und lade es - ebenso bitte das Jar-Archiv - hier hoch. Offensichtlich gibt es hier ein Problem mit den Packages.

Das lange Laden liegt wohl an dem Initialisieren aller Bibliotheken.

LG Florian


----------

