Mavenは、指定された実行可能なjarをターゲット環境に従って生成する


詳細
実際のプロジェクトでは、「あるコマンドを実行することで何かを解決する」というニーズによく遭遇します.
開発者がスクリプト言語が得意であれば、スクリプトを直接書いてコマンドラインで実行すれば幸いです.
開発者がJava、Cなどの静的言語しか得意でない場合は、最終的に実行可能なファイルを生成し、コマンドラインで直接呼び出すツールもあります.
そうすれば、難しいことはないようだ.確かに、もし事がただこのようにすれば、もちろん比較的に簡単で、肝心な問題は常に開発環境とテスト環境と生産環境が往々にして完全に同じではないことです.では、現在の環境の要件を満たすために、常に異なる環境で構成を変更する必要があります.これにより、手作業が必要なことが多くなります.特に、テストとマルチキャストの場合、配置された担当者は悪口を言うに違いありません.
まあ、こんなくだらないことを言って、私たちは今からこのような問題に正式に直面して、比較的優雅な方法でそれを解決しましょう.
仮に、私たちは今Javaを使ってこのことをしています.反復的にゆっくりします
まず実行可能なjarを作ります.これは比較的簡単で、ほとんどのプログラマーは自分のIDEを直接使用してプロジェクトを実行可能なjarに直接エクスポートすることができます.しかし、今は一人ですべてのことを完成できる時代ではありません.チームの協力を重視する時代には、開発者の個人環境に依存しない方法を選んでこのことを完成しなければなりません.幸いなことに、私たちはmavenを持っています.私たちはmavenの中でこのようなことを簡単に完成することができて、同時にある人の環境にも依存しません.
pom.xmlに以下の構成を追加すればOKです.
 
     maven-assembly-plugin 
     2.2-beta-5 
      
          
               
                    com.wolf.Process
               
          
           
               jar-with-dependencies 
           
      


 
OK、上記の構成によれば、mvn:assembly:assemblyというコマンドを簡単に使用して実行可能なjarを得ることができ、このjarではこのプロジェクトに依存する第三者のjarをこのjarに打ち込むことができ、java-jar xxxx.jarを直接使用して指定したコードを実行することができます.
もし、私たちがこの実行可能なjarを生成することにもっと個性的なことをする必要があるなら、どうすればいいのでしょうか.たとえば、プロジェクトではspringに依存する必要がありますが、このように直接生成されたjarが実行されると、自動的に生成されたjarのMETA-INFディレクトリに含まれるspring-schemasとspring-handlersファイルに必要なschemaの定義と解析方法が欠けているため、schema namespaceのエラーが報告されます.それは実はよく解決されています.assembly.xmlを指定してmavenにこの問題を処理してもらうことができます.具体的な構成は次のとおりです.
pom.xml


     
          
               maven-assembly-plugin
               
                    
                         
                              com.wolf.Process
                         
                    
                    
                         src/main/resources/META-INF/assemble.xml
                    
               
          
     



assemble.xml


    jar-with-dependencies
    
        jar
    
    false
    
        
            /
            true
            
                
                    META-INF/spring.handlers
                    META-INF/spring.schemas
                
            
            runtime
        
    
    
        
            src/main/resources/META-INF/spring.handlers
            META-INF
        
        
            src/main/resources/META-INF/spring.schemas
            META-INF
        
    


 
次に、実行可能なjarを汎用的な方法で生成する必要があります.次に、指定したターゲット環境のjarを生成する方法について、別の問題を解決します.
実は簡単です.mavenのprofile構成を導入すればいいです.具体的な構成は次のとおりです.
pom.xml


     
          windows
          
               
                    
                         maven-assembly-plugin
                         
                              
                                   src/main/resources/META-INF/assemble-linux.xml
                              
                         
                    
               
          
          
               windows
          
     
     
          linux
          
               
                    
                         maven-assembly-plugin
                         
                              
                                   src/main/resources/META-INF/assemble-linux.xml
                              
                         
                    
               
          
          
               linux
          
     


 
これにより、mvn-Dwindwos assembly:assemblyまたはmvn-DRinux assembly:assemblyを実行するだけで 指定したターゲット環境の実行可能なjarを生成できます.
PS:ターゲット環境jarの名前が異なる場合は、対応するassemble.xmlファイルでそのidの値を変更すればいいです.