7

チュートリアルに従って既存のJava/Tomcatアプリを変更して、Herokuにデプロイしようとすると、AppAssemblerでエントリクラスが見つからないという問題が発生します。target / bin / webappを実行する(またはHerokuにデプロイする)と、Error: Could not find or load main class org.stopbadware.dsp.Main

ただし、実行java -cp target/classes:target/dependency/* org.stopbadware.dsp.Mainは正しく実行されます。pom.xmlの関連部分は次のとおりです。

  <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>appassembler-maven-plugin</artifactId>
      <version>1.1.1</version>
      <configuration>
          <assembleDirectory>target</assembleDirectory>
          <programs>
              <program>
                  <mainClass>org.stopbadware.dsp.Main</mainClass>
                  <name>webapp</name>
              </program>
          </programs>
      </configuration>
      <executions>
          <execution>
              <phase>package</phase>
              <goals>
                  <goal>assemble</goal>
              </goals>
          </execution>
      </executions>
    </plugin>

私の推測でmvn packageは、AppAssemblerが正しいクラスパスを使用しない原因になっています。何か提案はありますか?

4

6 に答える 6

6

アーティファクトのパッケージングは​​ に設定する必要がありますjar。そうしないと、メイン クラスが見つかりません。

<pom>
  ...
  <packaging>jar</packaging>
  ...
</pom>

アーティファクト自体はクラスパスの最後に追加されるため、JAR ファイル以外には何も影響しません。

于 2013-12-02T16:49:44.697 に答える
3

試す:

mvn clean package jar:jar appassembler:assemble
于 2013-11-03T00:26:43.223 に答える
1

"$BASEDIR"/classes生成されたスクリプトの CLASSPATH 行に追加することで、これを解決できました。スクリプトは を呼び出すたびに書き直されるため、必要なクラスパス エントリmvn packageを呼び出して追加する短いスクリプトを作成しました。mvn package

明らかにちょっとしたハックですが、より「適切な」解決策を8時間以上試みた後、これは今のところ行う必要があります. ここで提案されているクラスパスを修正するためのより洗練された方法を確実に楽しませます。

于 2013-03-06T14:24:52.083 に答える
1

まず、古いバージョンのappassemblyr-maven-pluginを使用していることです。現在のバージョンは 1.3 です。

なぜあなたが定義しているのか理解できません

<assembleDirectory>target</assembleDirectory>

フォルダ。そのための適切なデフォルト値が存在します。したがって、通常は必要ありません。それとは別に、パッケージ フェーズにバインドする明示的な実行を定義する必要はありません。これは、appassemblyr-maven-plugin がデフォルトでパッケージ フェーズにバインドされているためです

さらに、useWildcardClassPath構成オプションを使用して、クラスパスを短くすることができます。

   <configuration>
     <useWildcardClassPath>true</useWildcardClassPath>
     <repositoryLayout>flat</repositoryLayout>
     ...
   </configruation>

また、生成されたスクリプトの呼び出しでエラーが表示されるのは、フォルダー内のすべての依存関係が配置されているリポジトリの場所が、定義された生成されたスクリプトとは異なることに依存しています。

于 2013-03-06T10:06:30.890 に答える