2015-03-31 28 views
10

Używam programu Java Maven i nie wiem, co wpisać jako <mainClass>. Próbowałem różnych rzeczy w oparciu o numerousstackoverflow questions, ale nie rozwiązują one problemu.Błąd Maven: Nie można znaleźć lub załadować głównej klasy

każdym razem mówi:

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

Mam to napisane w moim pom.xml (minus ???)

<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> 

Jak naprawić te błędy?

+0

Proszę pokazać pełny plik pom. – khmarbaise

+0

Wygląda na to, że poinstruujesz plik pom.xml, aby spakował twoje zależności od stron trzecich do lokalnego katalogu $ home/.m2/repozytorium, a następnie utworzysz nagi plik JAR w katalogu docelowym, a następnie uruchomisz słoik z 'java -jar yourfile.jar' i pojawia się ten błąd. Błąd mówi dokładnie, co powinieneś zrobić. Albo włączaj zależności od innych firm w ścieżce klas, albo poinstruuj plik pom, aby zawierał wszystkie zależności z wygenerowanym słojem. W ten sposób: http://stackoverflow.com/questions/1729054/including-dependencies-in-a-jar-with-maven –

Odpowiedz

1

Pierwszą rzeczą, którą sugeruję, jest użycie correct configuration for predefined descriptors.

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

Aby skonfigurować główną klasę trzeba wiedzieć opakowanie i nazwę klasy, który chcesz użyć, które powinny być podane do <mainClass>...</mainClass> parametru.

Ponadto polecam stop using Maven 2 and move to Maven 3 instead.

5

Jeśli nie potrzebujesz "dodatku do maven-assembly" z powodów innych niż ustawienie mainClass, możesz użyć wtyczki "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> 

Możesz zobaczyć wtyczkę w praktyce w ATLauncher.

Element „mainClass” powinien być ustawiony w klasie, że masz punkt wejścia do programu w np:

package your.package.yourprogram; 

public class YourMainClass { 

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

mam ten błąd użyciu Maven i odkryłem rozwiązanie.

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

Używam Java JDK w wersji 1.7 w systemie Linux, mój plik pom.xml był domyślnym generowane przez Netbeans i używałem tych poleceń do kompilacji, które działają dobrze z normalnego hello-world aplikacji Java:

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

Co się stało:

okazuje się moim problemem było to, że mój główny metodę powiększenia coś Exotic tak:

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

To właśnie rozszerzenie głównej klasy spowodowało powyższy błąd.

rozwiązanie TLDR:

Upewnij się, że główny klasa nie rozszerza żadnych klas 3rd party. Zmodyfikuj je i odejdź do swoich klas. Ten komunikat o błędzie jest okropny i wymaga procesu eliminacji, aby dowiedzieć się, co należy zrobić.

+1

idealne rozwiązanie! –

1

Też mam, kluczem było zmienić folder wyjściowy z bin na target\classes.Wygląda na to, że w Eclipse, podczas konwersji projektu do projektu Maven, ten krok nie jest wykonywany automatycznie, ale projekt Maven nie będzie szukał głównej klasy opartej na bin, ale będzie na target\classes.

Powiązane problemy