11

spring-boot-maven-plugin のバージョン 1.3.8.RELEASE とバージョン 1.4.0.RELEASE の間で、生成されたパッケージ構造に変更がありました (uber jar ファイルを抽出した場合) 1.3.8.RELEASE com、 lib、META-INF、および org ディレクトリ 1.4.0.RELEASE には BOOT-INF、META-INF、および org ディレクトリがあります。基本的に 1.4.0.RELEASE 以降 - すべてのクラスとライブラリは BOOT-INF ディレクトリにあります。このため、Amazon Lambda で Spring Boot プロジェクトを実行しようとすると、新しい Spring Boot Uber jar 構造を読み取ることができないため、jar が見つからないというメッセージが表示されます。

私の質問は、Spring Boot Maven プラグインの新しいバージョンで、バージョン 1.3.9.RELEASE と同じ構造になるように uber jar を生成することは可能ですか?

maven-shade-plugin を試しましたが、それは他の問題につながります

どんな助けでも大歓迎です

ありがとうダミアン

4

5 に答える 5

20

解決策は、pom.xml ファイルにプラグインの MODULE レイアウトを追加することでした。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <layout>MODULE</layout>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>
于 2017-03-30T20:29:06.517 に答える
0

私にとって、解決策はもう少し陰湿なものでした.... spring-boot-maven-plugin を pluginManagement の下にネストしました (以下を参照)。どっ!

厄介なことに、mvn spring-boot:run を実行すると、Spring Boot が正常に起動し、アプリが実行されます! PCF に (Spring-Boot JAR として) デプロイしようとするまでは、バイナリのフォーマットに問題があるというエラーが表示されませんでした....

<build>

  <!-- 
    DON'T DO THIS!! 
  -->
  <pluginManagement>

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

  </pluginManagement>

  <!-- 
    DO THIS INSTEAD!! 
  -->      
<plugins>

    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <version>${spring.boot.version}</version>            
      <executions>
          <execution>
              <goals>
                  <goal>repackage</goal>
                  <goal>build-info</goal>
              </goals>
          </execution>
      </executions>                        
    </plugin>                         

  </plugins>

</build>

POM から pluginManagement タグを削除すると、./BOOT-INF 構造が得られます。pluginManagement は通常、そのプラグインの構成を他のモジュールで使用する親 pom 構造用であることに注意してください。

于 2019-08-22T14:45:13.093 に答える