4

このリンクをたどろうとしています: http://maven.apache.org/plugins/maven-shade-plugin/examples.html

私はMavenが初めてです。例に従おうとすると、少し深みがないように感じます。

Quartz Scheduler を Spring と連携させることができました。jarファイルを使用してコマンドラインから実行できるようにしたい。

これが私が使用したクラスとpomファイルのリストです。

シェード Maven プラグイン

編集:

シェード jar ファイルを取得できます。mvn clean install を使用しました

しかし、コマンドラインから実行しようとすると、次のエラーが発生します。

C:\Users\SpringExample\target>java -jar SpringExample-1.0-SNA PSHOT-shaded.jar Exception in thread "main" java.lang.NoClassDefFoundError: org/sonatype/haven/Ex odusCli Caused by: java.lang.ClassNotFoundException: org.sonatype.haven.ExodusCli at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) Could not find the main class: org.sonatype.haven.ExodusCli. Program will exit.

EDIT2:

このリンクを使用して、上記の pom で次を使用しました。

http://seanfreitag.wordpress.com/2011/07/25/create-an-executable-jar-with-dependencies-using-maven/

 <project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>1.4</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <manifestEntries>
                    <Main-Class>org.sonatype.haven.ExodusCli</Main-Class>
                    <Build-Number>123</Build-Number>
                  </manifestEntries>
                </transformer>
                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>META-INF/spring.handlers</resource>
                </transformer>
                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>META-INF/spring.schemas</resource>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  ...
</project>
4

3 に答える 3

2

私はShadeを使用していませんが、次のように思われます。

  • Shadeを呼び出すために使用しているpomは表示されません

  • Main-Classを設定する方法を示すMavenの例では、クラスorg.sonatype.haven.HavenCliがアセンブルされているjarのどこかにあることを前提としています。

  • あなたにはそのようなクラスはありません

  • <mainClass>org.sonatype.haven.HavenCli</mainClass>のクラス名を、メインクラスとして使用したい名前に変更する必要があります

于 2011-09-09T19:56:41.940 に答える
1

更新: jar の Manifest.mf で Main-Class 属性を指定する必要があります。これについては、「Main-Class が MANIFEST.MF に追加される Shade プラグイン」の例を参照してください。

--

はい、次のようにプラグイン コードを pom ファイルに埋め込む必要があります。

<project>
       <!-- Other tags -->
        ---
    <build>
      <plugins>
        <plugin>
           ---
        </plugin>
      </plugins>
    </build>`
</project>

おそらくpom ファイルに<plugin>の直接の子として含まれています。<project>うまくいきません。

mvn install(または) を使用してMaven プロジェクトをビルドする通常の方法ではmvn package、shade プラグイン構成が指定されている場合、shaded jar が作成されます。したがって、2 つの jar があります。オリジナルの瓶とユーバーの瓶。

除外: 通常、uber jar にはdependencies、pom の jar リスト内のすべてのクラスが含まれます。excludes影付きの jar に入れる必要のない一連の jar ファイルを指定します。この例を詳しく見ると、junit:junit jar が除外されています。つまり、junit 内のクラスは uber jar に含まれません。

于 2011-09-09T19:46:55.113 に答える