Others-1.0-SNAPSHOT.jar中没有主清单属性
Manifest-Version: 1.0
Main-Class: com.example.YourMainClass
Manifest-Version
行指定了清单文件的版本,通常设置为 “1.0”。Main-Class
行指定了应用程序的入口类的完全限定类名(包括包名),例如 com.example.YourMainClass
。这个类必须包含一个public static void main(String[] args)
方法,作为应用程序的入口点。META-INF
目录下,并确保清单文件的名称为 MANIFEST.MF
(全部大写)。pom.xml
文件中配置主清单属性。我使用的是maven,怎样在pom里面设置
maven-jar-plugin
插件来配置JAR文件的主清单属性。下面是如何在pom.xml
文件中设置主清单属性的示例:<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-jar-pluginartifactId>
<version>3.2.0version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.YourMainClassmainClass>
manifest>
archive>
configuration>
plugin>
plugins>
build>
maven-jar-plugin
插件,并在其配置中指定了主清单属性
。请将com.example.YourMainClass
替换为您的应用程序的实际入口类的完全限定类名。mvn clean package
或mvn install
等Maven构建命令时,该插件将会生成包含指定主清单属性的JAR文件。pom.xml
文件的
元素下的
中添加了上述的maven-jar-plugin
配置,并替换主清单属性的值为您的应用程序的入口类。然后运行Maven构建命令以重新构建您的项目,生成包含主清单属性的JAR文件。如果想在MANIFEST.MF加上作者怎么办
pom.xml
文件中添加 maven-jar-plugin
插件的配置,指定 MANIFEST.MF
中的作者信息。您可以使用 maven-jar-plugin
插件的
元素来指定自定义的 MANIFEST.MF 条目,其中包括作者信息。<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-jar-pluginartifactId>
<version>3.2.0version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>trueaddDefaultImplementationEntries>
<addDefaultSpecificationEntries>trueaddDefaultSpecificationEntries>
<manifestEntries>
<Created-By>Your NameCreated-By>
manifestEntries>
manifest>
archive>
configuration>
plugin>
plugins>
build>
maven-jar-plugin
的
元素下添加了
条目,用于指定作者信息。请将 "Your Name"
替换为实际的作者名字或信息。mvn clean package
或 mvn install
)以重新构建您的项目。生成的 JAR 文件中的 MANIFEST.MF 文件应该包含您指定的作者信息。
和
元素分别用于添加默认的实现和规范条目,具体取决于您的需求是否需要它们。如果不需要这些默认条目,可以将它们设置为 false
。Manifest-Version: 1.0
Created-By: Your Name
为什么打包的时候依赖没有打包进来
compile
、runtime
、test
等。默认情况下,只有 compile
范围的依赖会被打包进 JAR 文件。确保您的依赖的范围正确,如果需要在运行时和编译时都使用它们,应将它们放在 compile
范围中。<dependencies>
<dependency>
<groupId>com.examplegroupId>
<artifactId>dependency-artifactartifactId>
<version>1.0.0version>
<scope>compilescope>
dependency>
dependencies>
pom.xml
中没有排除依赖的配置。在
部分内,确保没有使用
标签排除依赖。<dependencies>
<dependency>
<groupId>com.examplegroupId>
<artifactId>your-dependencyartifactId>
<version>1.0.0version>
dependency>
dependencies>
mvn clean
命令,以清除旧的构建文件和依赖,然后再运行 mvn package
或其他构建命令。这是我的pom文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0modelVersion> <groupId>OthersgroupId> <artifactId>OthersartifactId> <version>1.0-SNAPSHOTversion> <properties> <java.version>1.8java.version> <maven.compiler.source>8maven.compiler.source> <maven.compiler.target>8maven.compiler.target> <project.build.sourceEncoding>UTF-8project.build.sourceEncoding> properties> <dependencies> <dependency> <groupId>cn.hutoolgroupId> <artifactId>hutool-allartifactId> <version>5.8.16version> dependency> <dependency> <groupId>com.alibabagroupId> <artifactId>easyexcelartifactId> <version>3.0.5version> dependency> <dependency> <groupId>org.jsoupgroupId> <artifactId>jsoupartifactId> <version>1.10.2version> dependency> <dependency> <groupId>com.alibabagroupId> <artifactId>fastjsonartifactId> <version>1.2.41version> dependency> <dependency> <groupId>org.projectlombokgroupId> <artifactId>lombokartifactId> <version>1.18.22version> dependency> dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.pluginsgroupId> <artifactId>maven-jar-pluginartifactId> <version>3.2.0version> <configuration> <archive> <manifest> <mainClass>HtmlParseUtilmainClass> manifest> archive> configuration> plugin> plugins> build> project>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
pom.xml
文件,依赖看起来是正确配置的,而且也没有排除任何依赖。这通常意味着依赖应该被正确地打包进您的 JAR 文件中。mvn clean package
pom.xml
中的版本不一致,可能会导致问题。确保代码中使用的版本与 pom.xml
中声明的版本一致。这是打包的日志:
C:\Users\23991\.jdks\corretto-1.8.0_382\bin\java.exe -Dmaven.multiModuleProjectDirectory=D:\IDEA\Others -Djansi.passthrough=true -Dmaven.home=D:\Maven\apache-maven-3.8.1 -Dclassworlds.conf=D:\Maven\apache-maven-3.8.1\bin\m2.conf "-Dmaven.ext.class.path=D:\IDEA\IntelliJ IDEA 2020.3.1\plugins\maven\lib\maven-event-listener.jar" "-javaagent:D:\IDEA\IntelliJ IDEA 2020.3.1\lib\idea_rt.jar=58345:D:\IDEA\IntelliJ IDEA 2020.3.1\bin" -Dfile.encoding=UTF-8 -classpath D:\Maven\apache-maven-3.8.1\boot\plexus-classworlds-2.6.0.jar;D:\Maven\apache-maven-3.8.1\boot\plexus-classworlds.license org.codehaus.classworlds.Launcher -Didea.version=2023.1.1 package [INFO] Scanning for projects... [INFO] [INFO] ---------------------------< Others:Others >---------------------------- [INFO] Building Others 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ Others --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ Others --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 9 source files to D:\IDEA\Others\target\classes [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ Others --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory D:\IDEA\Others\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ Others --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ Others --- [INFO] No tests to run. [INFO] [INFO] --- maven-jar-plugin:3.2.0:jar (default-jar) @ Others --- [INFO] Building jar: D:\IDEA\Others\target\Others-1.0-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.358 s [INFO] Finished at: 2023-09-16T01:49:31+08:00 [INFO] ------------------------------------------------------------------------ Process finished with exit code 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
D:\IDEA\Others\target\Others-1.0-SNAPSHOT.jar
文件,然后查看其中是否包含依赖 JAR 文件。如果依赖正确打包进来,您应该能够在 JAR 文件的根目录下看到 lib
文件夹,其中包含所有的依赖 JAR 文件。META-INF/MANIFEST.MF
文件中正确设置了 Classpath,以包含依赖 JAR 文件。在构建日志中没有看到关于 Classpath 的信息,因此需要手动验证。没有lib文件夹,也没有Classpath
maven-shade-plugin
插件。maven-shade-plugin
:pom.xml
中添加 maven-shade-plugin
插件的配置:<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-shade-pluginartifactId>
<version>3.2.4version>
<executions>
<execution>
<phase>packagephase>
<goals>
<goal>shadegoal>
goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>您的主类mainClass>
transformer>
transformers>
configuration>
execution>
executions>
plugin>
plugins>
build>
您的主类
替换为您的主类的完整路径。mvn clean package
maven-shade-plugin
打包您的项目,并生成包含依赖和正确配置 Classpath 的可运行 JAR 文件。有其他方法吗
maven-shade-plugin
插件外,还有其他一些方法可以将依赖项打包到可运行的 JAR 文件中:maven-assembly-plugin
插件,它允许您配置自定义的 JAR 打包组装。您可以定义一个包含依赖的组装描述文件,然后使用该插件来创建可运行的 JAR 文件。以下是一个示例 maven-assembly-plugin
的配置:<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-assembly-pluginartifactId>
<version>3.3.0version>
<executions>
<execution>
<phase>packagephase>
<goals>
<goal>singlegoal>
goals>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependenciesdescriptorRef>
descriptorRefs>
configuration>
execution>
executions>
plugin>
plugins>
build>
spring-boot-maven-plugin
插件来完成这个任务。这个不用设置主类吗
maven-assembly-plugin
或 Spring Boot 的方法,不需要显式设置主类,因为这些插件会自动处理可执行 JAR 的配置。这些插件会在生成的 JAR 文件的清单(MANIFEST.MF)中添加必要的信息,包括主类的指定。maven-assembly-plugin
,使用 descriptorRef
设置为 "jar-with-dependencies"
时,插件会自动查找项目的主类并将其添加到清单中。public static void main
方法的类)并设置清单中的 Main-Class
属性。如果我想手动设置呢
部分添加 mainClass
元素,显式指定主类的完整类名。以下是手动设置主类的示例配置:<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-assembly-pluginartifactId>
<version>3.3.0version>
<executions>
<execution>
<phase>packagephase>
<goals>
<goal>singlegoal>
goals>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependenciesdescriptorRef>
descriptorRefs>
<archive>
<manifest>
<mainClass>com.example.MainClassmainClass>
manifest>
archive>
configuration>
execution>
executions>
plugin>
plugins>
build>
元素中的 com.example.MainClass
替换为您的主类的完整类名。这样配置后,插件将在生成的 JAR 文件的清单中设置指定的主类。public static void main(String[] args)
方法,否则 JAR 文件将无法正常运行。为什么会生成两个jar包
pom.xml
文件)以查看是否存在重复的插件配置。pom.xml
文件中同时配置了 maven-jar-plugin
和 maven-assembly-plugin
,这两个插件都用于生成 JAR 文件。如果您不小心同时配置了这两个插件,它们可能都会生成 JAR 文件,从而导致生成两个 JAR 包。pom.xml
文件,确保只配置了一个用于生成 JAR 文件的插件。如果需要,删除或注释掉不需要的插件配置。然后重新运行 Maven 构建命令,以确保只生成一个正确的 JAR 文件。pom.xml
文件的内容,以便我更详细地检查并提供帮助。<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0modelVersion> <groupId>OthersgroupId> <artifactId>OthersartifactId> <version>1.0-SNAPSHOTversion> <properties> <java.version>1.8java.version> <maven.compiler.source>8maven.compiler.source> <maven.compiler.target>8maven.compiler.target> <project.build.sourceEncoding>UTF-8project.build.sourceEncoding> properties> <dependencies> <dependency> <groupId>cn.hutoolgroupId> <artifactId>hutool-allartifactId> <version>5.8.16version> dependency> <dependency> <groupId>com.alibabagroupId> <artifactId>easyexcelartifactId> <version>3.0.5version> dependency> <dependency> <groupId>org.jsoupgroupId> <artifactId>jsoupartifactId> <version>1.10.2version> dependency> <dependency> <groupId>com.alibabagroupId> <artifactId>fastjsonartifactId> <version>1.2.41version> dependency> <dependency> <groupId>org.projectlombokgroupId> <artifactId>lombokartifactId> <version>1.18.22version> dependency> dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.pluginsgroupId> <artifactId>maven-assembly-pluginartifactId> <version>3.3.0version> <executions> <execution> <phase>packagephase> <goals> <goal>singlegoal> goals> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependenciesdescriptorRef> descriptorRefs> <archive> <manifest> <mainClass>HtmlParseUtilmainClass> manifest> archive> configuration> execution> executions> plugin> plugins> build> project>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
pom.xml
文件,您配置了 maven-assembly-plugin
插件来生成一个包含依赖的可执行 JAR 文件,并设置了主类为 HtmlParseUtil
。这个配置是正确的,它应该生成一个包含依赖的 JAR 文件,其中包含了您的主类。maven-assembly-plugin
插件的配置中指定生成的 JAR 文件名称,以避免生成原始 JAR 文件。例如,将 finalName
设置为与附加的 JAR 文件相同的名称:<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-assembly-pluginartifactId>
<version>3.3.0version>
<executions>
<execution>
<phase>packagephase>
<goals>
<goal>singlegoal>
goals>
<configuration>
<finalName>${project.build.finalName}finalName>
<descriptorRefs>
<descriptorRef>jar-with-dependenciesdescriptorRef>
descriptorRefs>
<archive>
<manifest>
<mainClass>HtmlParseUtilmainClass>
manifest>
archive>
configuration>
execution>
executions>
plugin>
plugins>
build>