2016-08-07 47 views
1

我已經看過關於此問題的其他stackoverflow問題,這些問題和答案與pom.xml中不正確的主類設置有關。我已經寫了主類,要有正確的包名稱和正確的區分大小寫,但每當我運行我的jar我得到的錯誤Could not find or load main classJava/Maven - 無法找到或加載主類

我添加項目到GitHub的:https://github.com/quicksilversly/maze和我的Maven Jar插件的配置是這樣的:

configuration> 
    <archive> 
     <manifest> 
      <addClasspath>true</addClasspath> 
      <mainClass>com.willisjtc.maze.VertxStarter</mainClass> 
     </manifest> 
    </archive> 
</configuration> 

這裏是我的主類:

package com.willisjtc.maze; 

import io.vertx.core.AbstractVerticle; 
import io.vertx.core.Vertx; 

import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.Logger; 

public class VertxStarter extends AbstractVerticle { 

    private static final Logger logger = LogManager.getLogger(VertxStarter.class); 

    public static void main(String... args) { 
     Vertx vertx = Vertx.vertx(); 
     vertx.deployVerticle("ruby/webVerticle.rb"); 
     vertx.deployVerticle("ruby/mazeVerticle.rb"); 
    } 
} 

這是我收到的時候我運行java tvf target/jar-to-run.jar

597 Sat Aug 06 21:59:54 MDT 2016 META-INF/MANIFEST.MF 
    0 Sat Aug 06 21:59:54 MDT 2016 META-INF/ 
    0 Sat Aug 06 21:43:12 MDT 2016 com/ 
    0 Sat Aug 06 21:43:12 MDT 2016 com/willisjtc/ 
    0 Sat Aug 06 21:43:12 MDT 2016 com/willisjtc/maze/ 
    0 Sat Aug 06 21:43:18 MDT 2016 META-INF/maven/ 
    0 Sat Aug 06 21:43:18 MDT 2016 META-INF/maven/com.willisjtc/ 
    0 Sat Aug 06 21:43:18 MDT 2016 META-INF/maven/com.willisjtc/maze/ 
    0 Sat Aug 06 21:43:10 MDT 2016 ruby/ 
907 Sat Aug 06 21:43:12 MDT 2016 com/willisjtc/maze/VertxStarter.class 
220 Sat Aug 06 21:56:14 MDT 2016 META-INF/maven/com.willisjtc/maze/pom.properties 
2105 Sat Aug 06 21:56:14 MDT 2016 META-INF/maven/com.willisjtc/maze/pom.xml 
137 Sat Aug 06 21:43:10 MDT 2016 ruby/mazeVerticle.rb 
221 Sat Aug 06 21:43:10 MDT 2016 ruby/webVerticle.rb 

所以我的主要班級我如預期的那樣。

爲了運行我的jar文件,我需要更改哪些內容?

+0

的可能的複製(HTTP [我如何創建使用Maven依賴一個可執行的JAR?]://計算器。 com/questions/574594/how-can-i-create-an-executable-jar -with-dependencies-using-maven) –

+0

請考慮接受答案或提供意見,以便我們可以進一步幫助您解決此問題。 – jlars62

回答

0

當您運行java -jar output-jar-file.jar時,您的main()找不到外部軟件包,如io.vertx.core.AbstractVerticle,io.vertx.core.Vertx,因此無法加載。

通過使用<addClasspath>true</addClasspath>,java會期望所有的依賴與您的可運行jar在同一目錄中一起呈現。實際上,你所有的依賴關係都在.m2 dir之內。

您需要將所有依賴項複製到target dir,並將其聲明爲輸出jar文件的類路徑。改變你的pom.xml像這樣:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.10</version> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
      <outputDirectory>${project.build.directory}/lib</outputDirectory> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>3.0.2</version> 
    <configuration> 
     <archive> 
      <manifest> 
       <addClasspath>true</addClasspath> 
       <classpathPrefix>lib/</classpathPrefix> 
       <mainClass>com.willisjtc.maze.VertxStarter</mainClass> 
      </manifest> 
     </archive> 
    </configuration> 
</plugin> 
1

這對我來說非常合適。

這些插件添加到您的pom.xml

<plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <configuration> 
      <source>1.8</source> 
      <target>1.8</target> 
     </configuration> 
    </plugin> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <executions> 
      <execution> 
       <phase>package</phase> 
       <goals> 
        <goal>shade</goal> 
       </goals> 
       <configuration> 
        <filters> 
         <filter> 
          <artifact>*:*</artifact> 
          <excludes> 
           <exclude>META-INF/*.SF</exclude> 
           <exclude>META-INF/*.DSA</exclude> 
           <exclude>META-INF/*.RSA</exclude> 
          </excludes> 
         </filter> 
        </filters> 
        <transformers> 
         <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 

          <!--enter the name of your class here--> 
          <mainClass>YourPackage.YourMainClass</mainClass> 
         </transformer> 
        </transformers> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 
</plugins> 

確保將mainClass元素更改爲正確的包和類名。

然後運行mvn package來構建jar可執行文件。

該罐子將在/target目錄內部構建。

然後你可以使用下列命令在命令行中運行jar:

java -jar <NameOfJarFile>.jar

相關問題