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