首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring boot war部署到jetty

Spring boot war部署到jetty
EN

Stack Overflow用户
提问于 2016-04-13 14:20:45
回答 1查看 3.1K关注 0票数 2

我正在使用maven作为构建工具创建一个spring-boot应用程序。

我遇到了一个问题,我想创建一个.war文件并将其部署到一个专用的jetty实例。

我得到的错误如下:

无法实例化日志:工厂方法'dataSource‘引发异常;嵌套异常为java.lang.NoClassDefFoundError: org/apache/juli/javax.sql.DataSource/LogFactory。

当我通过排除org.apache.juli -org.apache.juli-starter.jdbc中的依赖项来删除对Spring库的依赖项时,这个问题就解决了:

pom.xml:

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
    <exclusions>
        <exclusion>
             <groupId>org.apache.tomcat</groupId>
             <artifactId>tomcat-juli</artifactId>
        </exclusion>
    </exclusions>
</dependency>

排除此库将使war在当前版本的jetty上运行(jetty-distribution-9.3.8.v20160314)。

但是:当我尝试启动JAVA应用程序时,比如使用main和嵌入式jetty服务器,它崩溃了,并显示以下消息:

代码语言:javascript
复制
Failed to instantiate [javax.sql.DataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory.

通过再次包含org.apache.toimcat -> tomcat.juli,我可以通过main方法再次启动它,但不能构建在jetty实例上运行的.war文件...

我的主类包含以下两个方法(并使用@SpringBootApplication注释):

代码语言:javascript
复制
protected SpringApplicationBuilder configure(SpringApplicationBuilder app) {
    application.sources(App.class);
    return super.configure(app);
}

public static void main(String[] args) throws Exception {
    SpringApplication.run(App.class, args);
}

有人能帮我把这个/指向正确的方向吗?我想对.war和独立使用使用相同的配置。

POM.xml:`Thank你的答案,pom.xml在下面的评论中:

代码语言:javascript
复制
<?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>my.company</groupId>
    <artifactId>testing</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <properties>
        <java.version>1.8</java.version>
        <start-class>my.company.App</start-class>
    </properties>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                 <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <!-- Additional lines to be added here... -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <!-- <exclusions>
                <exclusion>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-juli</artifactId>
                </exclusion>
            </exclusions>-->
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-hateoas</artifactId>
        </dependency>
        <!-- com.oracle -->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.3</version>
        </dependency>
    </dependencies>
</project>
EN

回答 1

Stack Overflow用户

发布于 2017-11-02 17:56:32

通常,没有办法同时为“.war”和可执行文件“.jar”配置单一的pom.xml,并具有适当的依赖项管理差异。虽然我知道你想把它开发和测试为可执行文件,同时部署为'.war‘。

完美的解决方案是使用Maven配置文件。因此,您可以使用'.war‘打包默认配置文件,但不包括juli。你可以有一些“JarExecutable”配置文件,你可以把它包括回去,并描述与默认的所有其他区别。

其他的解决方案也不是那么糟糕,通常也很有帮助,它配置了Jetty所提供的所有依赖项。Spring Boot打包将其包含到可执行jars中,而在打包'.war‘时省略它们(或者打包到单独的目录,默认情况下不包括在类路径中)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36590159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档