簡體   English   中英

Maven exec有效,但是java -jar不起作用

[英]Maven exec works, but java -jar does not

我有一個只有一個依賴項的簡單Maven項目。 我可以安裝它並通過Exec Maven插件在命令行中運行它:

mvn exec:java -D"exec.mainClass"="com.MyClass"

打包后,maven在我的目錄中生成一個.jar文件。 Maven JAR插件的幫助下,我明確了自己的清單,以了解我的main方法類。 看起來像:

...
Created-By: Apache Maven 3.3.1
Build-Jdk: 1.8.0_66
Main-Class: com.MyClass

現在,我想使用java命令像常規的Java可執行文件一樣運行此.jar文件,但是請執行以下操作:

java -jar myFile.jar

它給出了關於我唯一的依賴關系的錯誤java.lang.NoClassDefFoundError

我如何使Maven將所有依賴項添加到我的可執行jar文件中?

您可以使用Apache Maven Assembly Plugin來創建具有所有依賴項的jar,因此pom.xml應該如下所示:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>mypackage.myclass</mainClass>
            </manifest>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
</plugin>

希望對您有幫助,再見。

實現此目的的一種方法是使用Apache Maven Shade插件

該插件提供了將工件打包(包括其依賴項)並遮蔽(即重命名)某些依賴項的包的功能。

對於具有許多依賴性的大型項目,此插件具有一些優點。 此處對此進行了解釋: Maven插件之間的區別(assembly-plugins,jar-plugins,shaded-plugins)

在我的項目中,我將其用於以下配置:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-shade-plugin</artifactId>
  <version>2.4.2</version>
  <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">
            <mainClass>com.xxx.tools.imagedump.ImageDumpLauncher</mainClass>
          </transformer>
          <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
            <resource>META-INF/spring.handlers</resource>
          </transformer>
          <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
            <resource>META-INF/spring.schemas</resource>
          </transformer>
        </transformers>
      </configuration>
    </execution>
  </executions>
</plugin>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM