使用-jar运行spring启动应用程序时出错

使用-jar运行spring启动应用程序时出错,spring,spring-boot,Spring,Spring Boot,这个问题被问了一遍又一遍,但我找不到答案。我有一个使用spring boot的应用程序,intellij可以毫无问题地运行它,但是java-jar echohostname.jar告诉我这个错误: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean 这是我的主要课程: public class ApplicationMain { public

这个问题被问了一遍又一遍,但我找不到答案。我有一个使用spring boot的应用程序,intellij可以毫无问题地运行它,但是
java-jar echohostname.jar
告诉我这个错误:

Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean
这是我的主要课程:

public class ApplicationMain {

    public static void main(String[] args) {


        SpringApplicationBuilder builder = new SpringApplicationBuilder(SpringConfiguration.class);
        ConfigurableApplicationContext applicationContext = builder.run(args);


    }
这是我的控制器类:

@RestController
public class Controller {

    @Autowired
    @Qualifier("getSigarProxy")
    private SigarProxy sigarProxy;

    @RequestMapping(value = "/hostname", method = RequestMethod.GET)
    public String hostName() throws SigarException {
        return "HELLO THERE";
        //return sigarProxy.getNetInfo().getHostName();
    }
}
这是spring配置类:

@SpringBootApplication
@Configuration
@ComponentScan("controller")
public class SpringConfiguration {

    @Bean
    public static PropertySourcesPlaceholderConfigurer getPropertySourcesPlaceholderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }

    @Bean
    public Sigar getSigar() {
        return new Sigar();
    }

    @Bean
    public SigarProxy getSigarProxy() {
        return SigarProxyCache.newInstance(getSigar(), 1000);
    }

    @Bean
    @Scope("prototype")
    public HttpHeaders getHttpHeaders() {
        return new HttpHeaders();
    }

    @Bean
    @Scope("prototype")
    public AsyncRestTemplate getRestTemplate() {
        return new AsyncRestTemplate();
    }

}
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>

    <groupId>echoHostname</groupId>
    <artifactId>echoHostname</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.fusesource</groupId>
            <artifactId>sigar</artifactId>
            <version>1.6.4</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.1.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.1.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.1.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>4.1.4.RELEASE</version>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>1.2.3.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <version>1.2.3.RELEASE</version>
        </dependency>


    </dependencies>


</project>
更新的POM:

public class ApplicationMain {

    public static void main(String[] args) {

        ApplicationContext ctx = SpringApplication.run(SpringConfiguration.class, args);


    }
}
<?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>

    <groupId>echoHostname</groupId>
    <artifactId>echoHostname</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.fusesource</groupId>
            <artifactId>sigar</artifactId>
            <version>1.6.4</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>4.1.4.RELEASE</version>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>1.2.7.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <version>1.2.7.RELEASE</version>
        </dependency>


    </dependencies>


</project>

4.0.0
回声主机名
回声主机名
1.0-快照
org.springframework.boot
springbootmaven插件
org.springframework.boot
spring启动程序父级
1.2.7.发布
org.fusesource
西格尔
1.6.4
org.springframework
弹簧式
4.1.4.1发布
org.springframework.boot
SpringBootStarterWeb
1.2.7.发布
org.springframework.boot
弹簧启动机tomcat
1.2.7.发布

非常感谢您的帮助。

ApplicationMain.java

在您的
pom.xml
中添加以下插件。构建maven项目并执行jar命令

            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>


ApplicationMain.java

在您的
pom.xml
中添加以下插件。构建maven项目并执行jar命令

            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>


在spring boot项目中,您需要将父pom

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.2.7.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

org.springframework.boot
spring启动程序父级
1.2.7.发布
您可以删除spring依赖项,如上下文、核心和bean

添加到pom中

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

org.springframework.boot
springbootmaven插件

然后再次构建jar。

在spring boot项目中,您需要将父pom

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.2.7.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

org.springframework.boot
spring启动程序父级
1.2.7.发布
您可以删除spring依赖项,如上下文、核心和bean

添加到pom中

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

org.springframework.boot
springbootmaven插件


然后再次构建jar。

是的,我也这么做了,但这样做会导致intellij也出现同样的错误尝试用ApplicationContext ctx=SpringApplication.run(ApplicationMain.class,args)替换ApplicationMain.java中的代码;还是同样的错误,它在intellij中运行,但不使用-jar命令。您使用的确切jar命令是什么?我刚刚在eclipse中试过,它可以工作。我在问题
java-jar echohostname.jar
中给出了确切的命令,是的,我也这样做了,但这样做会导致intellij也给出同样的错误尝试用ApplicationContext ctx=SpringApplication.run(ApplicationMain.class,args)替换ApplicationMain.java中的代码;还是同样的错误,它在intellij中运行,但不使用-jar命令。您使用的确切jar命令是什么?我刚刚在eclipse中进行了尝试,它很管用。我在问题
java-jar echohostname.jar
您使用的是maven吗?在这种情况下,请将pom添加到问题中file@reos用pomen更新了问题:你在使用maven吗?在这种情况下,请将pom添加到问题中file@reos用pom更新了这个问题,尽管如此,在intellij中运行应用程序仍然一切正常,但不运行jar filehmm,这很奇怪。我使用eclipse,您的代码运行正常。请用您的实际pom更新您的问题。尝试将@EnableAutoConfiguration添加到您的SpringConfiguration类中。No No No.dll。很奇怪,intellij内部的一切都很好,但Jarj没有。是的,很奇怪。我可以在命令行和eclipse中运行jar。我不知道可能运行maven clean然后安装maven会有帮助。就这么做了,在intellij中运行应用程序一切都很好,但不运行jar filehmm这很奇怪。我使用eclipse,您的代码运行正常。请用您的实际pom更新您的问题。尝试将@EnableAutoConfiguration添加到您的SpringConfiguration类中。No No No.dll。很奇怪,intellij内部的一切都很好,但Jarj没有。是的,很奇怪。我可以在命令行和eclipse中运行jar。我不知道运行maven clean然后安装maven可能会有帮助。