【问题标题】:run spring boot with java -jar with tools.jar as dependency使用 java -jar 和 tools.jar 作为依赖项运行 spring boot
【发布时间】:2023-03-27 08:46:01
【问题描述】:

我正在尝试运行一个需要 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 应该指向 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>

知道我应该如何在没有 mvn 的情况下运行它吗?我做错了什么?

【问题讨论】:

  • “需要 tools.jar 作为依赖项”。我在你的 pom 中没有看到这种依赖关系。
  • 不,我已经在另一个尝试中添加了 maven 定义,但无论如何都无法正常工作,我已将其删除。我想如果你用安装了 JRE 的 JDK 运行它应该在那里,并且它在 spring boot 运行时工作正常,所以在这种情况下依赖是存在的,但是在包之后不是......
  • 系统范围的依赖项不会添加到 fat jar 中。你不想在你的 Spring Boot 应用程序中重新打包“tools.jar”,这感觉真的不对。有趣的是I am actually working on support system-scope dependencies right now!
  • 你的意思是我不应该需要那种依赖?我正在使用activejpa(活动记录模式的实现)并将代理附加到vm,直到我看到通过那个jar完成的部分,这就是我需要它的原因......
  • this question。与此同时,我已经实现了在引导中包含系统范围的依赖项。这将在 1.4.0.RC1(下一个版本)中提供。

标签: java spring maven jar spring-boot


【解决方案1】:

系统范围依赖不会添加到重新打包的 jar 中(例如“fat”jar)。这就是为什么您的应用在开发中运行良好(使用“本地”类路径),而在作为单独的包启动时却无法正常运行的原因。

upcoming Spring Boot 1.4.0.RC1 release will support this feature:您可以在 Maven 插件配置中设置 includeSystemScope,并且将包含任何系统范围的依赖项。注意重新包装tools.jar可能是有味道的,见this question

【讨论】:

    猜你喜欢
    • 2021-02-14
    • 2023-03-10
    • 1970-01-01
    • 2016-02-08
    • 2018-08-16
    • 2021-07-23
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    相关资源
    最近更新 更多