技术开发 频道

关于Apache Maven您不知道的5件事

  2. 定制 MANIFEST.MF

  虽然 maven-jar-plugin 允许您修改 MANIFEST.MF 文件的共有部分,但有时候您需要一个更个性化的 MANIFEST.MF。解决方案是双重的:

  在一个 “模板” MANIFEST.MF 文件中定义您的所有定制配置。

  配置 maven-jar-plugin 来使用您的 MANIFEST.MF 文件,然后使用一些 Maven 配置增强。

  例如,考虑一个包含 Java 代理的 JAR 文件。要运行一个 Java 代理,需要定义 Premain-Class 和设置许可。清单 3 展示了这样一个 MANIFEST.MF 文件的内容:

  清单 3. 在一个定制的 MANIFEST.MF 文件中定义 Premain-Class

Manifest-Version: 1.0
Premain
-Class: com.geekcap.openapm.jvm.agent.Agent
Can
-Redefine-Classes: true
Can
-Retransform-Classes: true
Can
-Set-Native-Method-Prefix: true

   在清单3中,我已指定 Premain-Class - com.geekcap.openapm.jvm.agent.Agent 被授权许可来对类进行重定义和再转换。接下来,我更新 maven-jar-plugin 代码来包含 MANIFEST.MF 文件。如清单 4 所示:

  清单 4. 包含 Premain-Class

            <plugin>
                
<groupId>org.apache.maven.plugins</groupId>
                
<artifactId>maven-jar-plugin</artifactId>
                
<configuration>
                    
<archive>
                        
<manifestFile>
                          src
/main/resources/META-INF/MANIFEST.MF
                        
</manifestFile>
                        
<manifest>
                            
<addClasspath>true</addClasspath>
                            
<classpathPrefix>lib/</classpathPrefix>
                            
<mainClass>
                              com.geekcap.openapm.ui.PerformanceAnalyzer
                            
</mainClass>
                        
</manifest>
                    
</archive>
                
</configuration>
            
</plugin>

   这是一个很有趣的示例,因为它既定义了一个 Premain-Class — 允许 JAR 文件作为一个 Java 代理运行,也有一个 mainClass — 允许它作为一个可执行的 JAR 文件运行。在这个特殊的例子中,我使用 OpenAPM(我已构建的一个代码跟踪工具)来定义将被 Java 代理和一个用户界面记录的代码跟踪。简而言之,这个示例展示一个显式清单文件与动态修改相结合的力量。

0
相关文章