web-dev-qa-db-ja.com

Mavenエラー:メインクラスが見つからないか、ロードできませんでした

私はJava Mavenプログラムを使用していますが、<mainClass>として何を入力すべきかわかりません。 numerousstackoverflow question が、エラーを解決していません。

それが言うたびに:

Maven Error: Could not find or load main class ...

pom.xml???を除く)内にこれを書いています

  <build>
  ...
  <plugins>
  ...
    <plugin>
        <artifactId>maven-Assembly-plugin</artifactId>
        <version>2.5.3</version>
        <configuration>
            <descriptors>
                <descriptor>src/main/Assembly/jar-with-dependencies.xml</descriptor>
            </descriptors>
            <archive>
                <manifest>
                    <mainClass> ??? </mainClass>
                </manifest>
            </archive>
        </configuration>
        <executions>
            <execution>
            <id>make-Assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
            </execution>
        </executions>
    </plugin>
  ...
  </plugins>
  ...
  </build>

これらのエラーを修正するにはどうすればよいですか?

27
MLMLTL

MainClassの設定以外の理由で「maven-Assembly-plugin」が必要でない限り、「 maven-jar-plugin 」プラグインを使用できます。

     <plugins>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <archive>
                    <index>true</index>
                    <manifest>
                        <mainClass>your.package.yourprogram.YourMainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
     </plugins>

ATLauncher で実際にプラグインを見ることができます。

「mainClass」要素は、次のようにプログラムへのエントリポイントがあるクラスに設定する必要があります。

package your.package.yourprogram;

public class YourMainClass {

    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
14
jamierocks

このエラーが発生しました Mavenを使用して、解決策を見つけました。

Error: Could not find or load main class com.mycompany.testapifactory.Main

LinuxでJava JDKバージョン1.7、私のpom.xmlファイルはNetbeansによって生成されたデフォルトであり、これらのコマンドを使用してコンパイルしました。通常のhello-world Javaアプリケーションで正常に動作します:

mvn clean compile
Java -jar target/TestAPIFactory-1.0-SNAPSHOT.jar com.mycompany.testapifactory.Main

何が起こったのか:

私の問題は、私のメインメソッドが次のようなエキゾチックなものを拡張していることでした:

public class Main extends SomeExoticLibraryClass{
    public static void main(String[] args){
        //...
    }
}

上記のエラーの原因は、このメインクラスの拡張でした。

TLDRソリューション:

メインクラスがサードパーティクラスを拡張していないことを確認してください。それらを独自のクラスにリファクタリングします。そのエラーメッセージはひどいものであり、何をすべきかを見つけるために除去のプロセスが必要です。

12
Eric Leschinski

私もそれを得ました、キーは出力フォルダーをbinからtarget\classesに変更することでした。 Eclipseでは、プロジェクトをMavenプロジェクトに変換するとき、このステップは自動的には行われませんが、Mavenプロジェクトはbinに基づいてメインクラスを探しませんが、target\classesを探します。

1
WesternGun

私もそれを手に入れました。私にとっては、m2フォルダー(C:\ Users\username.m2)を削除し、mavenプロジェクトを更新すると、問題は解決しました。

1

私はこのエラー(メインクラスのclassNotFoundException)を受け取りました、実際にpomバージョンを変更したので、mavenを再度インストールしてからエラーが消えました。

0
Priya

これをpom.xmlファイルに追加します。

<configuration>
   <transformers>
       <transformer implementation="org.Apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
       <transformer implementation="org.Apache.maven.plugins.shade.resource.ManifestResourceTransformer">
         <mainClass>sample.HelloWorldApplication</mainClass>
       </transformer>
   </transformers>
</configuration>

プロジェクトのクラス名(フルパス)を、「run」メソッドを含むメインメソッドで構成される「com.packageName.className」などのパッケージ名とともに追加します。そして、あなたの「???」の代わりにwrite $ {mainClass}これは、上記のclassNameを自動的に取得します。

次に、コマンドmvn clean installおよびmvn -jar "jar_file_name.jar" server "yaml_file_name.yml"を試してください。

正常に動作し、サーバーが指定されたポートで起動することを願っています。

0
Abhishek Gupta

私にとって、この問題はMavenとは何の関係もなく、.jarの実行方法とは関係ありませんでした。いくつかのコードを記述し、Mavenで.jarとしてパッケージ化しました。私はそれを実行しました

Java target/gs-maven-0.1.0.jar

oPでエラーが発生しました。実際には、-jarオプション:

Java -jar target/gs-maven-0.1.0.jar
0
Jack M

プラグインの下のpomでメインクラスの場所を指定する

<build>
        <plugins>
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <archive>
                        <index>true</index>
                        <manifest>
                            <mainClass>com.example.hadoop.wordCount.WordCountApp</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>
0

以下のスニペットに従ってください。動作します。

<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.xyz</groupId>
    <artifactId>test</artifactId>
    <packaging>jar</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>TestProject</name>
    <description>Sample Project</description>
    <dependencies>
        <!-- mention your dependencies here -->
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-Assembly-plugin</artifactId>
                <version>3.1.1</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.xyz.ABC.</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-Assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

.Javaタグ内のメインクラスの完全な分類されたクラス名(.classまたは<mainClass></mainClass>のないパッケージ名を含むクラス名)を提供する必要があることに注意してください。

0
Sumit Karmakar

私が最初に提案するのは、 事前定義された記述子の正しい構成 を使用することです。

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <artifactId>maven-Assembly-plugin</artifactId>
        <version>2.5.3</version>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
        [...]
</project>

メインクラスを設定するには、使用するクラスのパッケージと名前を<mainClass>...</mainClass>パラメータ。

さらに、 Maven 2の使用を停止し、代わりにMaven 3に移動する をお勧めします。

0
khmarbaise