3

この問題に関する他のスタックオーバーフローの質問を確認しましたが、これらの質問と回答は、pom.xml の不適切なメイン クラス設定に関連しています。正しいパッケージ名と適切な大文字と小文字の区別を持つようにメイン クラスを作成しましたが、jar を実行するたびにCould not find or load main class.

プロジェクトを github: https://github.com/quicksilversly/mazeに追加しました。Maven jar プラグインの構成は次のようになります。

configuration>
    <archive>
        <manifest>
            <addClasspath>true</addClasspath>
            <mainClass>com.willisjtc.maze.VertxStarter</mainClass>
        </manifest>
    </archive>
</configuration>

そして、ここに私のメインクラスがあります:

package com.willisjtc.maze;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Vertx;

import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.Logger;

public class VertxStarter extends AbstractVerticle {

    private static final Logger logger = LogManager.getLogger(VertxStarter.class);

    public static void main(String... args) {
        Vertx vertx = Vertx.vertx();
        vertx.deployVerticle("ruby/webVerticle.rb");
        vertx.deployVerticle("ruby/mazeVerticle.rb");
    }
}

これは私が実行したときに得られるものですjava tvf target/jar-to-run.jar:

 597 Sat Aug 06 21:59:54 MDT 2016 META-INF/MANIFEST.MF
   0 Sat Aug 06 21:59:54 MDT 2016 META-INF/
   0 Sat Aug 06 21:43:12 MDT 2016 com/
   0 Sat Aug 06 21:43:12 MDT 2016 com/willisjtc/
   0 Sat Aug 06 21:43:12 MDT 2016 com/willisjtc/maze/
   0 Sat Aug 06 21:43:18 MDT 2016 META-INF/maven/
   0 Sat Aug 06 21:43:18 MDT 2016 META-INF/maven/com.willisjtc/
   0 Sat Aug 06 21:43:18 MDT 2016 META-INF/maven/com.willisjtc/maze/
   0 Sat Aug 06 21:43:10 MDT 2016 ruby/
 907 Sat Aug 06 21:43:12 MDT 2016 com/willisjtc/maze/VertxStarter.class
 220 Sat Aug 06 21:56:14 MDT 2016 META-INF/maven/com.willisjtc/maze/pom.properties
2105 Sat Aug 06 21:56:14 MDT 2016 META-INF/maven/com.willisjtc/maze/pom.xml
 137 Sat Aug 06 21:43:10 MDT 2016 ruby/mazeVerticle.rb
 221 Sat Aug 06 21:43:10 MDT 2016 ruby/webVerticle.rb

したがって、私のメインクラスは期待どおりです。

jar ファイルを実行するには、何を変更する必要がありますか?

4

2 に答える 2

3

これは私にとって完璧に機能しました。

これらのプラグインを に追加しますpom.xml:

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>
                <configuration>
                    <filters>
                        <filter>
                            <artifact>*:*</artifact>
                            <excludes>
                                <exclude>META-INF/*.SF</exclude>
                                <exclude>META-INF/*.DSA</exclude>
                                <exclude>META-INF/*.RSA</exclude>
                             </excludes>
                         </filter>
                     </filters>
                     <transformers>
                         <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">

                             <!--enter the name of your class here-->
                             <mainClass>YourPackage.YourMainClass</mainClass>
                         </transformer>
                     </transformers>
                </configuration>
            </execution>
        </executions>
    </plugin>
</plugins>

mainClass要素を正しいパッケージ名とクラス名に変更してください。

次に実行mvn packageして、jar 実行可能ファイルをビルドします。

jar は/targetディレクトリ内に構築されます。

次に、次のコマンドを使用して、コマンド ラインから jar を実行できます。

java -jar <NameOfJarFile>.jar

于 2016-08-08T15:23:50.497 に答える
0

を実行するjava -jar output-jar-file.jarと、 のmain()ような外部パッケージが見つからないためio.vertx.core.AbstractVerticleio.vertx.core.Vertxロードできません。

を使用することにより<addClasspath>true</addClasspath>、Java は、すべての依存関係が実行可能な jar と一緒に同じディレクトリに表示されることを期待します。実際、すべての依存関係は.m2dir 内にあります。

すべての依存関係を dir にコピーしtarget、それを output-jar-file のクラスパスとして宣言する必要があります。pom.xml を次のように変更します。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.10</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
          <outputDirectory>${project.build.directory}/lib</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.0.2</version>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>com.willisjtc.maze.VertxStarter</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>
于 2016-08-07T07:56:16.897 に答える