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