私は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>
これらのエラーを修正するにはどうすればよいですか?
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");
}
}
このエラーが発生しました 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ソリューション:
メインクラスがサードパーティクラスを拡張していないことを確認してください。それらを独自のクラスにリファクタリングします。そのエラーメッセージはひどいものであり、何をすべきかを見つけるために除去のプロセスが必要です。
私もそれを得ました、キーは出力フォルダーをbin
からtarget\classes
に変更することでした。 Eclipseでは、プロジェクトをMavenプロジェクトに変換するとき、このステップは自動的には行われませんが、Mavenプロジェクトはbin
に基づいてメインクラスを探しませんが、target\classes
を探します。
私もそれを手に入れました。私にとっては、m2フォルダー(C:\ Users\username.m2)を削除し、mavenプロジェクトを更新すると、問題は解決しました。
私はこのエラー(メインクラスのclassNotFoundException)を受け取りました、実際にpomバージョンを変更したので、mavenを再度インストールしてからエラーが消えました。
これを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"を試してください。
正常に動作し、サーバーが指定されたポートで起動することを願っています。
私にとって、この問題はMavenとは何の関係もなく、.jarの実行方法とは関係ありませんでした。いくつかのコードを記述し、Mavenで.jarとしてパッケージ化しました。私はそれを実行しました
Java target/gs-maven-0.1.0.jar
oPでエラーが発生しました。実際には、-jar
オプション:
Java -jar target/gs-maven-0.1.0.jar
プラグインの下の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>
以下のスニペットに従ってください。動作します。
<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>
のないパッケージ名を含むクラス名)を提供する必要があることに注意してください。
私が最初に提案するのは、 事前定義された記述子の正しい構成 を使用することです。
<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に移動する をお勧めします。