gpt4 book ai didi

java - 可以从 Eclipse (STS) 启动 Spring Boot,但不能从 CLI 启动

转载 作者:行者123 更新时间:2023-12-02 02:19:48 44 4
gpt4 key购买 nike

我有一个似乎无法解决的问题。我在 Boot Dashboard 中使用 STS 3.9.2 从 Eclipse (Oxygen) 启动 Spring Boot 应用程序没有任何问题: enter image description here

但是,当我尝试从命令行运行它时,出现文件丢失的错误:

Exception in thread "main" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:62) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:54) ... 1 more Caused by: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:724) at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:531) at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:355) at sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:286) at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:120) at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:72) at java.lang.Class.createAnnotationData(Class.java:3521) at java.lang.Class.annotationData(Class.java:3510) at java.lang.Class.getAnnotations(Class.java:3446) at org.springframework.core.type.StandardAnnotationMetadata.(StandardAnnotationMetadata.java:68) at org.springframework.beans.factory.annotation.AnnotatedGenericBeanDefinition.(AnnotatedGenericBeanDefinition.java:56) at org.springframework.context.annotation.AnnotatedBeanDefinitionReader.registerBean(AnnotatedBeanDefinitionReader.java:139) at org.springframework.context.annotation.AnnotatedBeanDefinitionReader.registerBean(AnnotatedBeanDefinitionReader.java:127) at org.springframework.context.annotation.AnnotatedBeanDefinitionReader.register(AnnotatedBeanDefinitionReader.java:122) at org.springframework.boot.BeanDefinitionLoader.load(BeanDefinitionLoader.java:158) at org.springframework.boot.BeanDefinitionLoader.load(BeanDefinitionLoader.java:134) at org.springframework.boot.BeanDefinitionLoader.load(BeanDefinitionLoader.java:126) at org.springframework.boot.SpringApplication.load(SpringApplication.java:708) at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:357) at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) at se.itab.bos.admin.AdminServer.main(AdminServer.java:37) ... 6 more

我尝试从我的启动类中注释掉以下内容:

@SpringBootApplication
@Import({
// AppConfig.class
// , ActiveMqServerConfig.class
// , MetricConfig.class
// , AdminConfig.class
// , SystemConfig.class
// , SystemMessageRouterConfig.class
// , CommandConfig.class
// , AdminMessageRouterConfig.class
})
public class AdminServer {

这解决了问题,以便我可以从命令行启动,但我不明白为什么。在我的 pom.xml 中,我定义了所有其他模块,其中包含这些文件。

我正在使用 Spring Boot Starter 1.3.5.RELEASE 和 Java 8。

任何帮助将不胜感激。

已更新

这是我的完整 pom:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>se.bos</groupId>
<artifactId>bos-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../bos-parent</relativePath>
</parent>
<artifactId>bos-admin</artifactId>
<packaging>jar</packaging>
<name>BOS Admin</name>
<properties>
<java.version>1.7</java.version>
<start-class>se.bos.admin.AdminServer</start-class>
</properties>
<dependencies>
<!-- operations: spring boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-remote-shell</artifactId>
</dependency>
<!-- operations: spring boot admin -->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
<!-- application: bos -->
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>bos-site</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>bos-server</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>bos-core</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>bos-client</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>bos-model</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>bos-system</artifactId>
</dependency>
<!-- application: spring boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- test -->
<!-- -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>

要从命令行启动项目,我运行:

mvn clean install
java -jar target/admin.jar

将每个导入一一注释掉后,我也发现问题源于导入的模块,但还没有找到原因。

从命令行运行java -version:

openjdk version "1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-0ubuntu0.16.04.2-b12)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)

这与 Eclipse 中使用的以及 JAVA_HOME 中使用的相同

最佳答案

使用mvn clean install不会为您生成可执行的jar文件,因为这不会打包可执行的spring boot库和pom依赖项。它只会生成一个仅包含您的代码的 jar 文件。

使用spring-boot-maven-plugin,您需要执行spring-boot:repackage目标和阶段,以便正确打包可执行jar文件具有 spring boot/pom 依赖项并准备在命令行上执行。即运行 mvn package spring-boot:repackage 然后在命令行上运行您的应用程序。

有关此内容的完整详细信息可以在 Spring Boot Maven Plugin Documentation 中找到。和 spring-boot:repackage目标。

注意:它可以在 Eclipse 中工作,因为 Eclispe 已正确设置类路径以在编译和运行时引用 pom 中的依赖项,而编译后的 jar 文件则不然。

关于java - 可以从 Eclipse (STS) 启动 Spring Boot,但不能从 CLI 启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48667004/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com