0

我正在构建一个应用程序,然后在 MANIFEST.MF 文件中合并一些自定义键:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <version>2.5</version>
  <configuration>
    <archive>
      <manifestEntries>
        <Build-Time>${maven.build.timestamp}</Build-Time>
        <Build-Revision>${buildNumber}</Build-Revision>
      </manifestEntries>
    </archive>
  </configuration>
</plugin>

我有 2 个配置文件,生产配置文件使用以下资源配置:

<resources>
    <resource>
        <!-- "all" is used for all profiles, "development" and "production" -->
        <directory>src/main/resources/all</directory>
    </resource>
    <resource>
        <!-- "prod" is just used for "production" -->
        <directory>src/main/resources/prod</directory>
    </resource>
</resources>

默认的 MANIFEST.MF 位于src/main/resources/all/META-INF/MANIFEST.MF,应用作基础。

我期待什么?

我希望 MANIFEST.MF 可以myproject.war/WEB-INF/classes/META-INF/MANIFEST.MF根据提供的值更新“Build-Time”和“Build-Revision”。然后我将能够在运行时访问 MANIFEST.MF 文件以检索“Build-Revision”键并处理缓存内容。

相反会发生什么?

相反,会发生 MANIFEST.MF 在内部创建myproject.war/META-INF/MANIFEST.MF并更新了值,并且在该WEB-INF位置只有 MANIFEST.MF 的副本,没有更新任何键。

为什么WEB-INF/classes/META-INF/MANIFEST.MF没有通过maven-war-plugin更新?

4

1 回答 1

1

(我想通了,这是我对 maven 如何处理src/main/resources和清单文件的无知)

Maven 在里面创建了一个合适的MANIFEST.MF文件META-INF/,并将其用作清单的默认约定路径,不需要在src/main/resources文件夹中创建另一个,默认应该在根目录下。

如果您从src/main/resources(将被复制到WEB-INF/classes/META-INF/MANIFEST.MF)中删除 MANIFEST,您将只有一个,并且可以使用以下方式META-INF/MANIFEST.MF从应用程序访问:

request.getServletContext().getResourceAsStream( "/META-INF/MANIFEST.MF" );
于 2014-12-13T06:38:03.783 回答