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

时间:2015-11-16 13:38:05

标签: spring spring-boot

这个问题一直被问到,但我找不到答案。我有一个使用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);


    }

这是我的Controller类:

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

更新主要:

public class ApplicationMain {

    public static void main(String[] args) {

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


    }
}

更新的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>

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

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

@SpringBootApplication

中添加班级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>

此页面提供了有关maven程序集插件的更多信息 - https://maven.apache.org/plugins/maven-assembly-plugin/usage.html

答案 1 :(得分:0)

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

您可以删除spring依赖项,例如context,core和beans。

添加到pom

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

再次制作罐子。