2015-03-31 78 views
10

我正在使用Java Maven程序,我不知道如何輸入<mainClass>。我試過基於numerousstackoverflow questions的各種東西,但他們沒有解決這個錯誤。Maven錯誤:無法找到或加載主類

每次它說:

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> 

如何解決這些錯誤?

+0

請顯示您的完整pom文件。 – khmarbaise 2015-04-02 08:07:43

+0

聽起來好像你正在指導你的pom.xml文件將你的第三方依賴關係打包到你的本地$ home/.m2/repository中,然後在你的目標目錄下創建裸JAR文件,然後你用'java -jar yourfile.jar',你會得到這個錯誤。錯誤告訴你你應該做什麼。在類路徑中手動包含第三方依賴關係,或者指示pom文件將所有依賴包括在生成的jar中。像這樣:http://stackoverflow.com/questions/1729054/including-dependencies-in-a-jar-with-maven – 2016-07-05 16:06:08

回答

1

我建議的第一件事就是使用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> 

配置,你需要知道你想使用應給予到<mainClass>...</mainClass>參數類的包和名稱的主類。另外我建議stop using Maven 2 and move to Maven 3 instead

5

除非您需要'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"); 
    } 
} 
5

我使用Maven得到這個錯誤,我發現瞭解決方案。

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

我使用的Java JDK 1.7版本的Linux上,我pom.xml文件是由Netbeans的默認生成的,我是使用這些命令來編譯,這也很好地工作正常你好世界的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解決方案:

確保您的主類是不延長任何第三方類。重構那些外出進入他們自己的課堂。這個錯誤信息很糟糕,需要消除過程才能找到要做的事情。

+1

完美的解決方案! – 2017-08-22 14:06:47

1

我也知道了,關鍵是將輸出文件夾從bin更改爲target\classes。看起來,在Eclipse中,將項目轉換爲Maven項目時,此步驟不會自動完成,但Maven項目不會根據bin查找主類,但會在target\classes上查找。

相關問題