The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:
每个Java包(JAR,WAR,EAR等)在META-INF
目录下都有一个MANIFEST.MF
文件。该文件包含了一组属性,用于描述这个特定的包。例如:
当您的应用程序有多个JAR依赖时,您的类路径中会有多个MANIFEST.MF
文件。它们都位于相同的位置:META-INF/MANIFEST.MF
。在运行时经常需要遍历所有文件并根据名称查找属性。
jcabi-manifests可以通过一行代码实现这一点。
让我们来看看为什么你希望从清单文件中读取属性,并在低级别上它是如何工作的。
当您打包一个库甚至一个Web应用程序时,最好在其MANIFEST.MF
中添加一个属性,其中包含软件包版本名称和构建编号。在Maven中,maven-jar-plugin
可以帮助您(maven-war-plugin
几乎具有相同的配置)。
buildnumber-maven-plugin
will help you to get ${buildNumber}
from Git, SVN or Mercurial:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
</plugin>
在所有这些操作之后,您的JAR文件中的MANIFEST.MF
将包含这两行额外的内容(除了Maven默认添加的其他所有行之外)。
在运行时,您可以向用户显示这些值,以帮助他理解他正在使用的产品版本。
以stateful.co为例。在其首页底部,您会看到版本号和Git哈希值。它们是从每次页面点击时部署的WAR包的MANIFEST.MF
中获取的。
尽管这可能被视为一种不良做法(参见Jez Humble和David Farley的《持续交付:通过构建、测试和部署自动化实现可靠的软件发布》),但在持续集成/交付周期中,有时将生产凭据直接打包到JAR/WAR存档中是很方便的。
例如,您可以将您的PostgreSQL连接详细信息直接编码到MANIFEST.MF
中:
之后,您可以在运行时使用jcabi-manifests
来检索它们。
如果您了解MANIFEST.MF
的其他有用用途,请告诉我。
Translated by ChatGPT gpt-3.5-turbo/42 on 2023-11-28 at 15:46