我正在进行一个使用JAAS的项目,不幸的是,Tomcat需要将一个文件放在war根目录中的META文件夹中。
app.war
|__META-INF
| |___context.xml
...
我认为这已经很奇怪了,因为WAR的默认META位置在类文件夹中。
app.war
|__WEB-INF
| |__classes
| |__META-INF
...
所以我使用Maven,它声明src/main/resources/main中的任何内容都将被复制到适当的位置。奇怪的是,它还在文件结构的根目录中创建一个META文件夹,留给我两个META文件夹。
项目结构
app
|__src/main/java
|__src/main/resources
| |__META-INF
| |__context.xml
...
mvn封装后的
app
|__META-INF [1]
|__WEB-INF
| |__classes
| |__META-INF [2]
| |__context.xml
...
因此,如果war标准声明META应该在类文件夹下(如#2所示),那么为什么maven war创建#1文件夹。有没有办法让它把文件复制到那个文件夹中,而不是第二个文件夹?
问候
发布于 2013-08-02 12:41:04
所以我找到了这个
这说明拥有2个META文件夹并不是问题。我发现了一点:
JAR文件规范
其中声明有关META文件夹的内容:
JAR文件本质上是一个zip文件,包含一个可选的META目录。如果存在...The元INF目录,则用于存储包和扩展配置数据,包括安全性、版本控制、扩展和服务。
这是:
JSR-000315 JavaTM Servlet3.0
在10.6节中,它说明了WAR文件结构:
当打包成这样一个表单时,将出现一个META目录,其中包含对Java归档工具有用的信息。这个目录不能被容器直接作为内容来响应Web客户端的请求,尽管它的内容可以通过getResource和getResourceAsStream对ServletContext的调用在servlet代码中看到。还必须用SC_NOT_FOUND(404)响应返回任何访问META目录中的资源的请求。
因此,从WAR规范来看,正确的位置是WEB/classes/META。然而,由于war是一个特殊的jar文件,所以使用/META作为扩展点是有意义的。在JPA persistence.xml和Tomcat context.xml文件中可以看到这样不同的用途:前者应该放在WEB/classes/META中,而后者应该放在/META中。
https://stackoverflow.com/questions/17997731
复制相似问题