Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven &引用;mvn弹簧靴:运行;工作正常,但执行Spring Boot胖jar失败_Maven_Spring Boot_Proguard - Fatal编程技术网

Maven &引用;mvn弹簧靴:运行;工作正常,但执行Spring Boot胖jar失败

Maven &引用;mvn弹簧靴:运行;工作正常,但执行Spring Boot胖jar失败,maven,spring-boot,proguard,Maven,Spring Boot,Proguard,我的问题的简短描述:mvn spring boot:run允许我运行spring boot应用程序而不会出现问题,而mvn包spring boot:repackage生成一个无法启动的自执行fat jar,异常为org.springframework.context.ApplicationContextException:无法启动web服务器;嵌套异常为org.springframework.context.ApplicationContextException:由于缺少ServletWebSe

我的问题的简短描述
mvn spring boot:run
允许我运行spring boot应用程序而不会出现问题,而
mvn包spring boot:repackage
生成一个无法启动的自执行fat jar,异常为
org.springframework.context.ApplicationContextException:无法启动web服务器;嵌套异常为org.springframework.context.ApplicationContextException:由于缺少ServletWebServerFactory bean,无法启动ServletWebServerApplicationContext。

我怀疑问题与Proguard有关,但我不确定

我已经花了数小时阅读了有关堆栈溢出的相关问题(此异常似乎是一个常见问题),但是我没有找到错误的原因,也没有找到解决方案。考虑到
mvn-spring-boot:run
,我也不明白为什么我必须修改我的代码(就像我读过的很多讨论中那样)

问题的详细描述…

我的Spring Boot应用程序在Netbeans 9中运行良好,我需要一个胖的自执行jar来在CentOS服务器上部署该应用程序。我知道Netbeans通过
mvn Spring Boot:run
运行Spring Boot

在我的开发机器中,我创建了两个脚本:第一个脚本像Netbeans一样执行Spring引导,并且可以正常工作;第二个尝试生成可执行jar。在脚本中,我更改了Java路径,因为我有多个Java版本(默认为Java10)

第一个脚本:

# Changes the current dir and remove the target dir
cd ~/Projects/AppServer/
rm -fR target

# Changes the Bash path, adding maven and replacing Java10 with Java8.
# It also set the Java home dir.
JAVA_HOME="/usr/lib/jvm/java-8-oracle/"
export M2_HOME=~/netbeans-9/java/maven
export PATH=${M2_HOME}/bin:${PATH}
export PATH=$(echo "$PATH" | sed -e 's#java-10-oracle#java-8-oracle#g')

# Execute the Spring Boot server
mvn -Dfile.encoding=UTF-8 spring-boot:run
输出:(我使用一个外部链接,因为堆栈溢出问题的正文中有长度限制)

第二个脚本

# Changes the current dir and remove the target dir
cd ~/Projects/AppServer/
rm -fR target

# Changes the Bash path, adding maven and replacing Java10 with Java8.
# It also set the Java home dir.
JAVA_HOME="/usr/lib/jvm/java-8-oracle/"
export M2_HOME=~/netbeans-9/java/maven
export PATH=${M2_HOME}/bin:${PATH}
export PATH=$(echo "$PATH" | sed -e 's#java-10-oracle#java-8-oracle#g')

# Create a fat jar to execute the Spring Boot server
mvn -Dfile.encoding=UTF-8 package spring-boot:repackage

# Tries to execute
cd target
./app-1.0.0-SNAPSHOT.jar
输出:(我使用外部链接,因为堆栈溢出问题的正文中有长度限制)

My
pom.xml

<?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>com.example.server</groupId>
    <artifactId>app</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>AppServerCode</name>
    <description>Teammate</description>

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

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <skip.it>true</skip.it>
    </properties>

    <dependencies>
        <dependency> 
            <groupId>javax.interceptor</groupId> 
            <artifactId>javax.interceptor-api</artifactId> 
            <version>1.2</version> 
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jersey</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web-services</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mariadb.jdbc</groupId>
            <artifactId>mariadb-java-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.2</version>
            <scope>provided</scope>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>javax.annotation</groupId>
            <artifactId>javax.annotation-api</artifactId>
            <version>1.3.2</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
            <version>5.0.7.RELEASE</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.3.4.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-jpamodelgen</artifactId>
            <version>5.3.4.Final</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator-cdi</artifactId>
            <version>6.0.12.Final</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.aerogear</groupId>
            <artifactId>aerogear-otp-java</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.11</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.3.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>javase</artifactId>
            <version>3.3.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>com.github.wvengen</groupId>
                <artifactId>proguard-maven-plugin</artifactId>
                <version>2.0.14</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>proguard</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <proguardVersion>6.0.3</proguardVersion>
                    <options>
                        <option>-target 1.8</option>
                    </options>
                    <exclusions>
                        <!-- exclude the artifact  -->
                        <exclusion>
                            <groupId>org.apache.logging.log4j</groupId>
                            <artifactId>log4j-api</artifactId>
                        </exclusion>                                                    
                    </exclusions>
                    <proguardInclude>${basedir}/src/main/resources/proguard.conf</proguardInclude>
                    <libs>
                        <lib>${java.home}/lib/rt.jar</lib>
                        <lib>${java.home}/lib/jce.jar</lib>
                    </libs>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>net.sf.proguard</groupId>
                        <artifactId>proguard-base</artifactId>
                        <version>6.0.3</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                    <executable>true</executable>
                </configuration>
                <executions>
                    <execution>
                        <id>pre-integration-test</id>
                        <goals>
                            <goal>start</goal>
                        </goals>
                        <configuration>
                            <skip>${skip.it}</skip>
                        </configuration>
                    </execution>
                    <execution>
                        <id>post-integration-test</id>
                        <goals>
                            <goal>stop</goal>
                        </goals>
                        <configuration>
                            <skip>${skip.it}</skip>
                        </configuration>
                    </execution>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                        <configuration>
                           <start-class>org.springframework.boot.loader.JarLauncher</start-class>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <configuration>
                    <skip>${skip.it}</skip>
                </configuration>
            </plugin>

        </plugins>
    </build>
</project>
<!-- https://mvnrepository.com/artifact/ -->

您是否在命令行中使用
java-jar-your_app.jar
执行jar,这就是您得到异常的原因?是的,如果我执行
/usr/lib/jvm/java-8-oracle/bin/java-jar/home/francesco/Projects/AppServer/target/app-1.0.0-SNAPSHOT.jar
我也会遇到同样的错误不确定proguard的用法,但是删除/禁用该依赖项以消除/隔离其问题或副作用是否容易?根据您的建议,我在
pom.xml
中评论了Proguard插件:是的,这就是问题所在。没有Proguard,胖罐子就可以工作。
-dontnote
-keepclasseswithmembers public class com.example.server.app.AppApplication {
    public static void main(java.lang.String[]);
}