2016-05-24 9 views
0

Ich versuche, eine Springboot-App, die tools.jar als Abhängigkeit, ich laufe "mvn-Paket Spring-Boot ausführen ausführen" und alles geht in Ordnung, aber nach der Verpackung mit „mvn Paket feder boot: rekombinieren“ und mit Java läuft -jar die erzeugte boot.jar die den folgenden Fehlerrun Spring Boot mit Java -Jar mit tools.jar als Abhängigkeit

java -jar "site-0.1.0-spring-boot.jar" 
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/attach/AttachNotSupportedException 
    at java.lang.Class.getDeclaredMethods0(Native Method) 
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source) 
    at java.lang.Class.getDeclaredMethod(Unknown Source) 
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: com.sun.tools.attach.AttachNotSupportedException 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at org.springframework.boot.loader.LaunchedURLClassLoader.doLoadClass(LaunchedURLClassLoader.java:178) 
    at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:142) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    ... 5 more 

JAVA_HOME auf JDK zeigt, wie es sollte, und dies ist mein pom

<properties> 
    <java.version>1.8</java.version> 
    <activejpa.version>0.2.5-SNAPSHOT</activejpa.version> 
    <embedded.mongo.version>1.50.3</embedded.mongo.version> 
</properties> 

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.3.3.RELEASE</version> 
</parent> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-mail</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-actuator</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-jpa</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>com.google.guava</groupId> 
     <artifactId>guava</artifactId> 
     <version>19.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.datatype</groupId> 
     <artifactId>jackson-datatype-jsr310</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.activejpa</groupId> 
     <artifactId>activejpa-core</artifactId> 
     <version>${activejpa.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>postgresql</groupId> 
     <artifactId>postgresql</artifactId> 
     <version>9.1-901-1.jdbc4</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-java8</artifactId> 
     <version>5.0.0.Final</version> 
    </dependency> 

    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-ehcache</artifactId> 
     <version>4.3.7.Final</version> 
    </dependency> 
    <!-- MongoDB --> 
    <!-- dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> 
     </dependency> <dependency> <groupId>de.flapdoodle.embed</groupId> <artifactId>de.flapdoodle.embed.mongo</artifactId> 
     <version>${embedded.mongo.version}</version> </dependency --> 
    <dependency> 
     <groupId>org.mongodb.morphia</groupId> 
     <artifactId>morphia</artifactId> 
     <!-- See https://github.com/mongodb/morphia/releases for the latest version --> 
     <version>1.1.1</version> 
    </dependency> 
    <!-- THYMELEAF --> 
    <dependency> 
     <groupId>org.thymeleaf</groupId> 
     <artifactId>thymeleaf</artifactId> 
     <version>${thymeleaf.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.thymeleaf</groupId> 
     <artifactId>thymeleaf-spring3</artifactId> 
     <version>${thymeleaf.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>nz.net.ultraq.thymeleaf</groupId> 
     <artifactId>thymeleaf-layout-dialect</artifactId> 
     <version>1.2.1</version> 
    </dependency> 
</dependencies> 

<repositories> 
    <repository> 
     <id>activejpa-mvn-repo</id> 
     <url>https://raw.github.com/juanignacionogueira/activejpa/mvn-repo/snapshots/</url> 
     <snapshots> 
      <enabled>true</enabled> 
      <updatePolicy>always</updatePolicy> 
     </snapshots> 
    </repository> 

    <repository> 
     <id>spring-releases</id> 
     <url>https://repo.spring.io/libs-release</url> 
    </repository> 
</repositories> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <goals> 
         <goal>repackage</goal> 
        </goals> 
        <configuration> 
         <classifier>spring-boot</classifier> 
         <mainClass>com.rinlit.RinconLiterarioApplication</mainClass> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <artifactId>maven-failsafe-plugin</artifactId> 
      <executions> 
       <execution> 
        <goals> 
         <goal>integration-test</goal> 
         <goal>verify</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

<pluginRepositories> 
    <pluginRepository> 
     <id>spring-releases</id> 
     <url>https://repo.spring.io/libs-release</url> 
    </pluginRepository> 
</pluginRepositories> 

Jede Idee, wie sollte ich es ohne MVN laufen? Was mache ich schlecht?

+1

"das benötigt tools.jar als Abhängigkeit". Ich sehe diese Abhängigkeit nicht in deinem Pom. –

+0

Nein, ich habe in einem anderen Versuch mit der Maven-Definition hinzugefügt, funktioniert aber trotzdem nicht und ich habe es entfernt. Ich vermute, dass es dort sein sollte, wenn Sie es mit JDK statt JRE ausführen, und es funktioniert ok mit Spring Boot-Lauf, so dass die Abhängigkeit in diesem Fall ist, aber nach Paket ist nicht ... – Alejandra

+0

Systembereichsabhängigkeiten werden nicht hinzugefügt zum fetten Glas. Sie möchten "tools.jar" nicht in Ihrer Spring Boot-App neu packen, das fühlt sich wirklich falsch an. Der lustige Teil ist, dass [Ich arbeite tatsächlich an der Unterstützung System-Bereich Abhängigkeiten _right now_] (https://github.com/spring-projects/spring-boot/issues/2224)! –

Antwort

2

Abhängigkeiten des Systembereichs werden im neu gepackten JAR nicht hinzugefügt (z. B. "fetter" JAR). Aus diesem Grund funktioniert Ihre App in der Entwicklung (mit dem Klassenpfad "local") und startet nicht als separates Paket.

Die upcoming Spring Boot 1.4.0.RC1 release will support this feature: Sie können includeSystemScope in Ihrer Maven-Plugin-Konfiguration festlegen und alle systemabhängigen Abhängigkeiten enthalten sein. Beachten Sie, dass das Umpacken tools.jar wahrscheinlich ein Geruch ist, siehe this question