Ошибка Maven: не удалось найти или загрузить основной класс
Я использую программу Java Maven, и я не знаю, что вводить как <mainClass>
. Я пробовал всевозможные вещи, основанные на многочисленных qaru.site/info/551617/..., но они не решают ошибку.
Каждый раз, когда он говорит:
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>
Как исправить эти ошибки?
Ответы
Ответ 1
Если вам не нужен "maven-assembly-plugin" по причинам, отличным от установки mainClass, вы можете использовать плагин " 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");
}
}
Ответ 2
Я получил эту ошибку с помощью Maven, и я нашел решение.
Error: Could not find or load main class com.mycompany.testapifactory.Main
Я использую java JDK версии 1.7 для Linux, мой файл pom.xml
был по умолчанию создан Netbeans, и я использовал эти команды для компиляции, которые отлично работают с обычным Java-приложением hello-world:
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){
//...
}
}
Именно это расширение основного класса вызвало указанную выше ошибку.
Решение TL;DR:
Убедитесь, что ваш основной класс не расширяет сторонние классы. Рефакторинг тех, кто выходит и уходит в свои классы. Это сообщение об ошибке ужасно и требует процесса устранения, чтобы выяснить, что делать.
Ответ 3
Я тоже получил его, ключ должен был изменить выходную папку с bin
на target\classes
. Кажется, что в Eclipse при преобразовании проекта в проект Maven этот шаг не выполняется автоматически, но проект Maven не будет искать основной класс на основе bin
, но будет на target\classes
.
Ответ 4
Я получил это тоже, для меня проблема была решена после удаления папки m2 (C:\Users\username.m2) и обновления проекта maven.
Ответ 5
Первое, что я хотел бы предложить, - использовать правильную конфигурацию для предопределенных дескрипторов.
<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.
Ответ 6
указать расположение основного класса в пом под плагинами
<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>
Ответ 7
Для меня проблема заключалась не в Maven, а в том, как я управлял .jar. Я написал некоторый код и упаковал его как .jar с Maven. Я управлял этим с
java target/gs-maven-0.1.0.jar
и получил ошибку в ОП. На самом деле вам нужна опция -jar
:
java -jar target/gs-maven-0.1.0.jar
Ответ 8
добавьте это в ваш файл 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>
и добавьте имя класса вашего проекта (полный путь) вместе с именем пакета, например "com.packageName.className", которое состоит из основного метода, содержащего метод run. И вместо твоего "???" напишите $ {mainClass}, который автоматически получит имя класса, которое вы упомянули выше.
Затем попробуйте команду mvn clean install и mvn -jar "jar_file_name.jar" сервер "yaml_file_name.yml"
Я надеюсь, что он будет работать нормально, и сервер будет запускаться на указанном порту.
Ответ 9
Я получил эту ошибку (classNotFoundException для основного класса), я фактически изменил версию pom, поэтому снова установил maven, а затем ошибка исчезла.
Ответ 10
Пожалуйста, следуйте приведенному ниже фрагменту.. это работает..
<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>
.