介绍

打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录, 这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息,下面将详细介绍MANIFEST.MF文件的内 容,先来看struts.jar中包含的MANIFEST.MF文件内容:
就是项目打包后jar的一些信息描述,提供给开发者查看,还有java虚拟机执行等。
一般情况,都是maven install帮助开发者自动生成的这个文件,不用我们去管这个文件的编写,因为这个文件很容易写错,造成无法编译。
一般都是靠pom中的maven打包完成:

  1. <plugins>
  2. <plugin>
  3. <groupId>org.apache.maven.plugins</groupId>
  4. <artifactId>maven-jar-plugin</artifactId>
  5. </plugin>
  6. </plugins>
  1. 或者依靠springbootmaven打包完成:
  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-maven-plugin</artifactId>
  6. <version>1.5.4.RELEASE</version>
  7. </plugin>
  8. </plugins>
  9. </build>

或者我们可以将打包好的jar包解压,进行修改该文件内容后,重新打包。
当然,我们可以使用pom.xml中的配置直接修改文件,例子如下:
下,就是针对MANIFEST.MF文件的配置,如果我们想要打包时,自动生成我们想要的东西,那么就可以在里面,编写我们想要的配置,配置清单里的详细解释看下面:

  1. <build>
  2. <finalName>my-javaagent</finalName>
  3. <plugins>
  4. <plugin>
  5. <groupId>org.apache.maven.plugins</groupId>
  6. <artifactId>maven-jar-plugin</artifactId>
  7. <configuration>
  8. <archive>
  9. <manifestEntries>
  10. <Agent-Class>me.geek01.javaagent.AgentMain</Agent-Class>
  11. <Premain-Class>me.geek01.javaagent.AgentPreMain</Premain-Class>
  12. <Main-Class>me.geek01.javaagent.Test01</Main-Class>
  13. <Can-Redefine-Classes>true</Can-Redefine-Classes>
  14. <Can-Retransform-Classes>true</Can-Retransform-Classes>
  15. </manifestEntries>
  16. </archive>
  17. </configuration>
  18. </plugin>
  19. <plugin>
  20. <groupId>org.apache.maven.plugins</groupId>
  21. <artifactId>maven-compiler-plugin</artifactId>
  22. <configuration>
  23. <source>8</source>
  24. <target>8</target>
  25. </configuration>
  26. </plugin>
  27. </plugins>
  28. </build>

一般属性

Manifest-Version


用来定义manifest文件的版本,例如:Manifest-Version: 1.0

Created-By


声明该文件的生成者,一般该属性是由jar命令行工具生成的,例如:Created-By: Apache Ant 1.5.1

Signature-Version


定义jar文件的签名版本

Class-Path


应用程序或者类装载器使用该值来构建内部的类搜索路径

应用程序相关属性

Main-Class


定义jar文件的入口类,该类必须是一个可执行的类,一旦定义了该属性即可通过 java -jar x.jar来运行该jar文件。