[英]JAR file execution: cannot find/load main class
我已經在eclipse上開發了一個maven項目,並在其上運行良好。 我想用它構建一個jar並從命令提示符下運行它。 我不想擁有所有依賴項的大罐子。 我想要一個帶有項目代碼的小jar,該項目代碼使用“ lib”文件夾作為依賴項(帶有jar文件),並使用“ resources”文件夾作為屬性文件。
我在Maven中使用的插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.1</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathLayoutType>custom</classpathLayoutType>
<customClasspathLayout>lib/${artifact.artifactId}${artifact.dashClassifier?}-${artifact.version}.${artifact.extension}</customClasspathLayout>
<mainClass>mypkg.Main</mainClass>
</manifest>
<manifestEntries>
<Class-Path>. ${project.build.directory}\resources ${project.build.directory}\lib</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}\lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}\resources</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
我的主班:
package mypkg;
import java.io.IOException;
public class Main {
public static void main(String[] args)
throws InstantiationException, IllegalAccessException, ClassNotFoundException, IOException {
.......
.......
}
}
將使用清單文件在“ META-INF”文件夾中創建jar。 清單文件(已刪除類路徑中的一些jar條目以供查看):
Manifest-Version: 1.0
Built-By: userName
Class-Path: . D:/project2/mypkg/target/ D:/project2/mypkg/target/resources D:/project2/mypkg/target/lib lib/hive-jdbc.jar lib/hive-common.jar lib/commons-lang.jar
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_101
Main-Class: mypkg.Main
文件夾結構:
folder-
-lib
-(all the jar files)
-resources
-(properties file)
-application.jar
我正在命令提示符下使用'java -jar application.jar mypkg.Main'。
但顯示“錯誤:找不到或加載主類mypkg.Main”
有人可以告訴我是什么導致了錯誤,以及如何解決該錯誤?
終於找到了解決方案。 只需在清單文件中進行一些修改。 罐子的版本不見了。
最終清單文件(已刪除類路徑中的一些jar條目以供查看):
Manifest-Version: 1.0
Built-By: userName
Class-Path: lib/hive-jdbc-1.1.0.jar lib/hive-common-1.1.0.jar
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_101
Main-Class: mypkg.Main
請注意:清單文件(Java 6及更高版本)的“ Class-Path”標頭中沒有通配符,例如“ lib / *”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.