我遇到了一个我似乎无法解决的问题。从引导仪表板启动Eclipse(Oxygen)和STS 3.9.2的Spring Boot应用程序没有问题:
但是,当我尝试从命令行运行它时,我收到一个文件丢失的错误:
线程中的异常" main"了java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:62) 在java.lang.Thread.run(Thread.java:748)引起: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:498)at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:54) ... 1更多引起:java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:724) 在 sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:531) 在 sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:355) 在 sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:286) 在 sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:120) 在 sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:72) 在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) 在 org.springframework.beans.factory.annotation.AnnotatedGenericBeanDefinition。(AnnotatedGenericBeanDefinition.java:56) 在 org.springframework.context.annotation.AnnotatedBeanDefinitionReader.registerBean(AnnotatedBeanDefinitionReader.java:139) 在 org.springframework.context.annotation.AnnotatedBeanDefinitionReader.registerBean(AnnotatedBeanDefinitionReader.java:127) 在 org.springframework.context.annotation.AnnotatedBeanDefinitionReader.register(AnnotatedBeanDefinitionReader.java:122) 在 org.springframework.boot.BeanDefinitionLoader.load(BeanDefinitionLoader.java:158) 在 org.springframework.boot.BeanDefinitionLoader.load(BeanDefinitionLoader.java:134) 在 org.springframework.boot.BeanDefinitionLoader.load(BeanDefinitionLoader.java:126) 在 org.springframework.boot.SpringApplication.load(SpringApplication.java:708) 在 org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:357) 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:307) 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) 在se.itab.bos.admin.AdminServer.main(AdminServer.java:37)... 6 更
我尝试在我的启动课中评论以下内容:
@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.
非常感谢任何帮助。
已更新
这是我的全部赌注:
<?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
答案 0 :(得分:2)
使用mvn clean install
不会为您生成可执行jar文件,因为这不会打包可执行的spring引导库和pom依赖项。它只会生成一个只包含代码的jar文件。
使用spring-boot-maven-plugin
,您需要执行spring-boot:repackage
目标和阶段,以便使用spring boot / pom依赖项正确打包可执行jar文件,并准备在命令行上执行。即运行mvn package spring-boot:repackage
然后在命令行上运行您的应用程序。
有关详细信息,请参阅Spring Boot Maven Plugin Documentation和spring-boot:repackage目标。
注意:它在Eclipse中有效,因为Eclispe已经适当地设置了类路径,以便在编译和运行时引用pom中的依赖项,而编译后的jar文件却没有。