2017-08-24 14 views
1

ソースではなくパッケージゴールの結果として作成されたjarファイルに対して、maven、特にspring-boot:runゴールを直接実行できますか?Maven spring-boot:コンパイル済みのjarファイルに対して実行する

私はこれをやりたい理由は、ホットスワップ可能なクラス(ホストに保存され、共有ボリュームを使用してコンテナにマップされている)を持つDockerコンテナでSpringブートアプリケーションを実行したいからです。悲しいことに、あなたがJava-jarを使ってアプリケーションを実行するとうまくいきません)、コンテナ内にもアプリケーションのソースコードを入れたくありません。

答えて

0

classesパラメータはオプションではありません(標準的なMavenプロジェクト構造を使用して推論されます)が、空のディレクトリを指定して、foldersパラメータを使用して以前にパッケージ化されたJARを含めることができます。ここでの例では、このような構成により

<plugin> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-maven-plugin</artifactId> 
    <configuration> 
     <mainClass>com.this.that.YourApplication</mainClass> 
     <!-- any directory will do as long as (a) it exists and (b) it does not contain classes --> 
     <classesDirectory>/tmp/</classesDirectory> 
     <folders> 
      <folder> 
       <!-- the address, relative to the plugin's workingDirectory, of the 'original' application JAR --> 
       tmp/lib/your-application.jar.original 
      </folder> 
     </folders> 
    </configuration> 
</plugin> 

だ、あなたは-Xで実行する場合は、春のブートプラグインによって生成されたJVMのクラスパスの最初の2つのエントリは、(1)アプリケーションのJARおよび(2あることがわかります)空のクラスディレクトリ。たとえば、次のように

[DEBUG] Classpath for forked process: <full_path_removed>/tmp/lib/your-application.jar.original:/tmp: 

注:

  • あなたはMETA-INF/MANIFEST.MFにメインクラスの命令が含まれていないオリジナルのJARを使用しているので、あなたがmainClassを供給する必要があります
  • 元のJARは、アプリケーションのメインクラスが元の場所に含まれているため(SpringブートパッケージのJARがそれを再配置するため)、SpringブートパッケージのJARではなく、元のJARを参照する必要があります。
関連する問題