【问题标题】:Spring Boot application is not executableSpring Boot 应用程序不可执行
【发布时间】:2017-06-17 18:37:58
【问题描述】:

我正在将旧的 Spring 设置迁移到 Spring Boot 1.5.1.RELEASE。

我未能获得可执行的 .jar,我遵循了无数示例,但我的 jar 未能成为可执行文件。

这是一个多模块设置,所以这是我的父 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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.xyz</groupId>
  <artifactId>xyz</artifactId>
  <name>xyz</name>
  <version>1.0.0</version>
  <packaging>pom</packaging>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.1.RELEASE</version>
  </parent>

  <properties>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <commons.version>3.5</commons.version>
    <guava.version>21.0</guava.version>
  </properties>

  <modules>
    <module>mainApp</module>
    <module>module1</module>
    <module>module2</module>
    ..........
  </modules>

  <dependencyManagement>
   <dependencies>

    <!-- Spring boot -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <!-- commons -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.5</version>
    </dependency>

    <!-- google guava  -->
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>${guava.version}</version>
    </dependency>

   <!-- Test -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency>
    </dependencies>
  </dependencyManagement>

</project>

这是 mainApp 的 pom,它是具有包含 main 方法的 Application.java 的模块。

<?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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <artifactId>xyz</artifactId>
    <groupId>com.xyz</groupId>
    <version>1.0.0</version>
  </parent>
  <artifactId>mainApp</artifactId>
  <groupId>com.xyz.mainApp</groupId>
  <packaging>jar</packaging>
  <name>mainApp</name>

  <dependencies>
<!-- Spring Boot -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

<!-- Spring Security OAuth2-->
    <dependency>
        <groupId>org.springframework.security.oauth</groupId>
        <artifactId>spring-security-oauth2</artifactId>
    </dependency> 


<!-- xyz dependencies -->    
    <dependency>
        <groupId>com.xyz.module3</groupId>
        <artifactId>module3</artifactId>
        <version>${project.version}</version>
    </dependency>     
    <dependency>
        <groupId>com.xyz.module2</groupId>
        <artifactId>module2</artifactId>
        <version>${project.version}</version>
    </dependency>
  </dependencies>

  <build>
    <pluginManagement>
        <plugins>
          <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <executable>true</executable>
            </configuration>
          </plugin>
       </plugins>
   </pluginManagement>
   <finalName>xyz</finalName>
  </build>

</project>

有效的方法:

所以当我在父 pom.xml 的文件夹中执行 mvn clean install 然后在 mainApp 文件夹中运行 mvn spring-boot:run 时一切正常 p>

失败的地方:

当我执行 java -jar mainApp/target/xyz.jar 时出现如下错误:

no main manifest attribute, in mainApp/target/xyz.jar

如果我尝试像 ./mainApp/target/xyz.jar 一样运行 jar,我不能,因为该文件不是可执行文件,我的 macOS Sierra 终端会显示此文件权限:

-rw-r--r--  1 userXYZ  staff  37641156 Feb  1 13:14 xyz.jar

如果我手动将权限更改为 -rwxr--r-- 并尝试运行该文件,我会得到以下乱码:

/xyz.jar: line 1: PK: command not found
./xyz.jar: line 2: syntax error near unexpected token `)'
./xyz.jar: line 2: ?iAJ META-INF?iAJMETA-INF/MANIFEST.MFu??J?0??y?y??,??nW*???Jb3?F?LI?????qa?n?3???)Mp5&V????ñ^IQ?????ޱ?.#??`?$?{<??7?m6?j܀?W????'????γڎ9?>????RT?͡?V??

G??

3iR?G4???dә?A(̀?z?ϖV]ٷ??T??O>?^??0wy?u?^??S]?iG?2?"???i?$?'

【问题讨论】:

    标签: java spring maven spring-boot jar


    【解决方案1】:

    问题不在于插件如何配置,而在于插件在哪里配置。

    我已经用 &lt;pluginManagement&gt; 包装了我的插件,这导致了所有问题,当我删除它时,所有问题都得到了解决并完美运行

    【讨论】:

      【解决方案2】:

      使用以下内容更新 pom.xml 中的构建块,确保您使用的是 Maven 3.2(或更高版本):

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

      【讨论】:

        【解决方案3】:

        jar 清单中缺少主类条目。

        请修改boot maven插件如下:

        <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
        
              <configuration>
                <mainClass>${start-class}</mainClass>
                <layout>ZIP</layout>
              </configuration>
              <executions>
                <execution>
                  <goals>
                    <goal>repackage</goal>
                  </goals>
                </execution>
              </executions>
            </plugin>
        

        插件info

        【讨论】:

        • 事情发生了一些变化,我遇到了一个异常:线程“main”中的异常 java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication at com.xyz.mainApp.Application.main(Application. java:12) 引起:java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424)在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 1 更多
        猜你喜欢
        • 2018-07-01
        • 1970-01-01
        • 2019-08-12
        • 1970-01-01
        • 1970-01-01
        • 2017-08-31
        • 2020-08-26
        • 1970-01-01
        • 2020-03-08
        相关资源
        最近更新 更多