首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Maven war在两个地方都有META文件夹。

Maven war在两个地方都有META文件夹。
EN

Stack Overflow用户
提问于 2013-08-01 15:05:15
回答 1查看 15.1K关注 0票数 18

我正在进行一个使用JAAS的项目,不幸的是,Tomcat需要将一个文件放在war根目录中的META文件夹中。

代码语言:javascript
运行
复制
app.war
  |__META-INF
  |    |___context.xml
 ...

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

代码语言:javascript
运行
复制
app.war
  |__WEB-INF
  |    |__classes
  |         |__META-INF
 ...

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

项目结构

代码语言:javascript
运行
复制
app
  |__src/main/java
  |__src/main/resources
  |       |__META-INF
  |             |__context.xml
 ...

mvn封装后的

代码语言:javascript
运行
复制
 app
  |__META-INF [1]
  |__WEB-INF
  |     |__classes
  |           |__META-INF [2]
  |                  |__context.xml
 ...

因此,如果war标准声明META应该在类文件夹下(如#2所示),那么为什么maven war创建#1文件夹。有没有办法让它把文件复制到那个文件夹中,而不是第二个文件夹?

问候

EN

回答 1

Stack Overflow用户

发布于 2013-08-02 12:41:04

所以我找到了这个

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

这说明拥有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中。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17997731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档