简体   繁体   English

使用java.jar以tools.jar作为依赖项运行spring boot

[英]run spring boot with java -jar with tools.jar as dependency

I am trying to run a springboot app that needs tools.jar as a dependency, I runned "mvn package spring-boot:run" and everything goes ok, but after packaging with "mvn package spring-boot:repackage" and running with java -jar the generated boot.jar the throws the following error 我正在尝试运行一个需要tools.jar作为依赖项的springboot应用程序,我运行“mvn package spring-boot:run”并且一切正常,但是在使用“mvn package spring-boot:repackage”打包并运行java之后-jar生成的boot.jar抛出以下错误

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 is pointing to JDK as it should, and this is my pom JAVA_HOME指向JDK,这是我的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>

Any Idea of how should I run it without mvn? 任何想法如何在没有mvn的情况下运行它? what am I doing bad? 我做得怎么样?

System scope dependencies are not added in the repackaged jar (eg 'fat' jar). 系统范围依赖关系不会添加到重新打包的jar中(例如'fat'jar)。 That is why your app works fine in development (with the "local" classpath) and does not when started as a separate package. 这就是为什么你的应用程序在开发中工作正常(使用“本地”类路径),而不是作为单独的包启动时。

The upcoming Spring Boot 1.4.0.RC1 release will support this feature : you'll be able to set includeSystemScope in your Maven plugin configuration and any system scoped dependencies will be included. 即将发布的Spring Boot 1.4.0.RC1版本将支持此功能 :您将能够在Maven插件配置中设置includeSystemScope ,并且将包含任何系统范围的依赖项。 Note that repackaging tools.jar is probably a smell, see this question 请注意,重新包装tools.jar可能是一种气味,请参阅此问题

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM