2016-05-30 6 views
0

私は生成された実行可能なJARファイルを実行するために.batファイルを作成しようとしています。私はthisプロジェクトを実行するために.batファイルを作成する方法を見つけました。だから、私はhereプラグインを読んで、私のpom.xmlに以下を追加しました。JARを実行するMaven Appassemblerを使用して.batファイルを作成する方法は?

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>appassembler-maven-plugin</artifactId> 
    <version>1.10</version> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>assemble</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <assembleDirectory>${assembleDir}</assembleDirectory> 
     <generateRepository>false</generateRepository> 
     <repositoryName>lib</repositoryName> 
     <configurationDirectory>conf</configurationDirectory> 
     <copyConfigurationDirectory>false</copyConfigurationDirectory> 
     <programs> 
      <program> 
       <mainClass>com.companyname.tests.TestRunner</mainClass> 
       <id>AutoConfigTest</id> 
      </program> 
     </programs> 
    </configuration> 
</plugin> 

そして、名前が示すように、はい、このJARは、JUnitテストケースが含まれています。

プラグインがJARをアンパックしてrepoフォルダを作成しないようにして、それをすべてのJAR(実行可能ファイルと依存関係)を含む私の既に生成したlibフォルダに設定しました。 .batファイルが生成されていますが、実行中に次のエラーが表示されます。

Error: Could not find or load main class com.companyname.tests.TestRunner 

また、実行後もコマンドプロンプトを残しておきます。この場合、すぐに終了します。たぶん、私はエラーが発生しているので。よく分かりません。

だから、もう一度検索して、thisが見つかりました。受け入れ答えが示唆するようにしかし、すでに含まれている私のpom.xml -

<packaging>jar</packaging> 

組み立てディレクトリがある -

AutoConfigTest 
| 
|--bin 
| `- contains the .bat file 
|--conf 
| `- contains the property files and other configuration files 
|--lib 
    `- contains all the JARs 

は、私はここで間違って何をしているのですか?

多分それは( README.mdから)に近い関連
+0

はい、あなたの言いたいこと](http://stackoverflow.com/q/15228501/6042824)はあなたのものと全く同じです。 'jar'はデフォルトのパッケージングであるため、受け入れられる解決策は奇妙です。他のソリューションや提案を試しましたか?それは間違って行くことができるいくつかのことがあり、お互いの答えは、それらのものの1つに取り組むようです。 –

+0

生成された '.bat'ファイルの内容は何ですか? 'lib /'の '.jar'ファイルにクラス' com.companyname.tests.TestRunner'が含まれていますか? – SubOptimal

+0

@SubOptimalはい、 'com'panyname.tests.TestRunner'が' lib'フォルダに入っているjarです。私はそれをチェックした。 –

答えて

0

問題が見つかりました。 @SubOptimalは、メインクラスがバッチファイルに表示されていないことを指摘しても間違いありません。

何らかの理由で、テスト用のJARファイル(メインクラスを含む)がバッチファイルのclasspath変数に追加されていません。その結果、私がバッチファイルを実行するたびに、私は質問に記載されているエラーを取得していました。

私は文書に戻り、thisを見つけました。

非常に長いクラスパスを持つことが多く、特にWindowsベースのプラットフォームでは長すぎるということを意味する多くの依存関係が発生することがあります。このオプションは、このような場合に役立ちます。このオプションを有効にすると、クラスパスにはクラスパスのワイルドカード(REPO/*)のみが含まれます。ただし、これはJava 1.6以上とrepositoryLayoutflatとの組み合わせでのみ機能することに注意してください。

代わりにパスに個別のJARファイルを追加するので、私はpom.xmlに次を追加することにより、クラスパスに全体libディレクトリを追加しました。

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>appassembler-maven-plugin</artifactId> 
    <version>1.10</version> 
    ... 
    <configuration> 
     ... 
     <repositoryLayout>flat</repositoryLayout> 
     <useWildcardClassPath>true</useWildcardClassPath> 
     ... 
    </configuration> 
    ... 
</plugin> 

libのリポジトリレイアウトが既にフラットだったため、これを行うことができました。階層はありませんでした。それ以外の変更は必要ありませんでした。バッチファイルが正常に動作するようになりました。

1

すべての依存関係、プロジェクト自体のアーティファクトは、定義された組み立てディレクトリに生成Mavenのリポジトリにを配置しています。すべての成果物(依存関係+プロジェクトの成果物)は、生成されたビンスクリプト内のクラスパスに追加されます。

pom.xmlでは、そのリポジトリの生成を防止します。プロジェクトの成果物が予定された場所に確実にコピーされるようにする必要があります。

と仮定すると、次のプロジェクト設定

<groupId>com.companyname</groupId> 
<artifactId>Maven-AppAssembler</artifactId> 
<version>0.0.1-SNAPSHOT</version> 

はアーティファクトが

"$REPO"/com/companyname/Maven-AppAssembler/0.0.1-SNAPSHOT/Maven-AppAssembler-0.0.1-SNAPSHOT.jar 

$REPO決意target/appassembler/libへ(スクリプトbin/AutoConfigTestにCLASSPATHの設定)であることが予想されます。

+0

エラーが見つかりました。メインクラスがバッチファイルに表示されていないことを指摘してください。何らかの理由で、テスト・ジャー・ファイル(メイン・クラスを含む)がバッチ・ファイルのclasspath変数に追加されていません。 –

関連する問題