INF文件夹在两个地方

我正在开发一个使用JAAS的项目,但不幸的是,Tomcat需要将一个文件放入战争根目录下的META-INF文件夹中

app.war
  |__META-INF
  |    |___context.xml
 ...

我认为这已经很奇怪了,因为WAR的默认META-INF位置在classes文件夹中。

app.war
  |__WEB-INF
  |    |__classes
  |         |__META-INF
 ...

所以我使用的是Maven,它指出src / main / resources / META-INF中的任何内容都将被复制到适当的位置。 奇怪的是,它还在文件结构的根目录下创建了一个META-INF文件夹,给我留下了2个META-INF文件夹。

项目结构

app
  |__src/main/java
  |__src/main/resources
  |       |__META-INF
  |             |__context.xml
 ...

mvn包后

 app
  |__META-INF [1]
  |__WEB-INF
  |     |__classes
  |           |__META-INF [2]
  |                  |__context.xml
 ...

所以,如果战争标准指出META-INF应该放在classes文件夹下,如#2所示,为什么maven war会创建#1文件夹。 有没有办法让文件复制到该文件夹​​而不是#2?

问候


所以我找到了这个:

两个Meta-Inf文件夹 - 正常结构?

其中指出有2个META-INF文件夹不是问题。 挖一点我发现:

JAR文件规范

其中说明了META-INF文件夹:

JAR文件本质上是一个包含可选META-INF目录的zip文件。 ... META-INF目录(如果存在)用于存储包和扩展配置数据,包括安全性,版本控制,扩展和服务。

和这个:

JSR-000315 JavaTM Servlet 3.0

关于WAR文件结构的第10.6节中提到:

当打包成这种形式时,会出现一个META-INF目录,其中包含对Java归档工具有用的信息。 尽管通过ServletContext的getResource和getResourceAsStream调用servlet代码可以看到它的内容,但是该容器不能直接作为内容由容器响应Web客户端的请求。 此外,访问META-INF目录中资源的任何请求都必须返回一个SC_NOT_FOUND(404)响应。

所以从WAR规范中,正确的地方是WEB-INF / classes / META-INF。 然而,由于战争是一个特殊的jar文件,因此将/ META-INF作为扩展点是有意义的。 可以在JPA persistence.xml和Tomcat context.xml文件中看到这样的不同用法:前者应放在WEB-INF / classes / META-INF中,而后者放在/ META-INF中。

链接地址: http://www.djcxy.com/p/74659.html

上一篇: INF folder in two places

下一篇: put xhtml page into a jar maven project