Maven如何知道将源文件放在展开的目录下的哪个位置?

时间:2014-12-28 09:42:07

标签: java maven

我正在学习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>

1 个答案:

答案 0 :(得分:2)

当Maven将编译好的文件放在WEB-INF/classes

时,请关注Java standard
  

Illustration from the The Java EE 6 Tutorial

此目录包含服务器端类: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的配置信息   客户,他可以把它放在这个目录下。