0
我已經在eclipse上開發了一個maven項目並且運行良好。我想從它構建一個jar並從命令提示符運行它。我不想擁有一個包含所有依賴關係的大型jar包。我想要一個帶有項目代碼的小jar,該項目代碼使用'lib'文件夾作爲依賴關係(使用jar文件)和'resources'文件夾作爲屬性文件。JAR文件執行:無法找到/加載主類
插件我在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' 文件夾中的清單文件中創建。 清單文件(除去類路徑一些罐條目用於觀察目的):
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的罐子application.jar mypkg.Main' 從命令提示。
,但它顯示「錯誤:無法找到或加載主類mypkg.Main」
有人能告訴我是什麼原因造成的錯誤,以及如何解決它?
爲什麼在命令的末尾添加「mypgk.Main」? – Tome
只是爲了確定。即使我沒有顯示相同的錯誤。 –
如果您在內部刪除''配置文件,是否找到主類並抱怨庫類不存在? –
Tome