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

时间:2018-02-07 15:06:00

标签: java spring spring-boot

我遇到了一个我似乎无法解决的问题。从引导仪表板启动Eclipse(Oxygen)和STS 3.9.2的Spring Boot应用程序没有问题: enter image description here

但是,当我尝试从命令行运行它时,我收到一个文件丢失的错误:

  

线程中的异常" 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

中的内容相同

1 个答案:

答案 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 Documentationspring-boot:repackage目标。

注意:它在Eclipse中有效,因为Eclispe已经适当地设置了类路径,以便在编译和运行时引用pom中的依赖项,而编译后的jar文件却没有。