我正在学习maven,虽然过去曾在蚂蚁工作过。
我只想弄清楚执行命令mvn install or mvn compile
时会发生什么。我主要是
感兴趣的是如何构建项目,如选择构建的资源位置以及构建它们的位置
我的项目源结构是
src > main > java > java files
src > main > resources > reources like spring config atc
src > main > webapp > static files like js,css etc
src > main > webapp > WEB-INF > web.xml and jsp files
一旦我给mvn包或mvn干净,我看到下面的分解目录(我的重点是这个),名称为myProject 以及其他文件lile war,classes等.ProProject的爆炸结构是
1) All files from (src > main > webapp) including WEB-INF gets copied under myProject
2) All files from (src > main > resources) gets copied under myProject > WEB-INF/Classes
3) All files from (src > main > java) gets copied under myProject > WEB-INF/Classes
根据我的理解,当我们提供任何mvn install或mvn compile或mvn包时 所有编译阶段都会执行。 但我的问题是Maven如何知道将源文件放在展开目录下的位置。 它是标准的maven吗?
以下是我正在使用
的pom.xml参考的片段<artifactId>myProject</artifactId>
<packaging>war</packaging>
<name>myProject</name>
.....
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>exploded</goal>
</goals>
</execution>
</executions>
<configuration>
<overlays>
</overlays>
</configuration>
</plugin>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>jslint</goal>
<goal>compress</goal>
</goals>
</execution>
</executions>
<configuration>
<aggregations>
</aggregations>
</configuration>
</plugin>
</plugins>
</build>
答案 0 :(得分:2)
当Maven将编译好的文件放在WEB-INF/classes
。
此目录包含服务器端类:servlet,实用程序类和JavaBeans组件。这些类只对servlet可见,不公开。
来自Java Servlet 3.1 specifications:
10.5目录结构
应用程序层次结构中存在一个名为“”的特殊目录 WEB-INF ”。这个 directory包含与文档中没有的应用程序相关的所有内容 应用程序的根目录。大部分的 WEB-INF 节点不是公共文档的一部分 应用树。除了打包的静态资源和JSP META- INF /资源 一个JAR文件驻留在 WEB-INF / lib目录 目录,没有其他 包含在中的文件 WEB-INF 目录可以提供di 直接到一个cl 因为 容器。但是,内容了 WEB-INF 目录对servlet代码可见 使用 的getResource 和 的getResourceAsStream 方法调用 ServletContext中 ,并可能使用 RequestDispatcher的 调用。因此,如果 Application Developer需要访问,来自 servlet代码,特定于应用程序 他不希望直接暴露给Web的配置信息 客户,他可以把它放在这个目录下。