在 Eclipse 中使用 Maven 构建 Web 项目

在 Eclipse 中使用 Maven 创建 Web 项目

1. 建立 Maven Project

选择 File→New→Other,在 New 对话框中选择 Maven→Maven Project→Next。

newmaven.png

2. 选择项目路径

勾选 Use default Workspace location(使用默认工作空间)→Next。

newmaven2.png

3. 选择项目类型

在 Artifact Id 中选择 maven-archetype-webapp。如果是 Spring Boot 项目,可以选择 maven-archetype-quickstart。

newmaven3.png

4. 输入 Group ID、Artifact ID 以及 Package

newmaven4.png

注意:Group Id 一般写大项目名称,Artifact Id 是子项目名称,Package 是默认的包名,不写也可以。

刚建立好后的文件结构如下图所示。

newmaven5.png

如果这里显示的内容多,一般是 Filters 设置的问题;或者 Perspective 为 JavaEE 模式,将其改成 Java 模式就可以了。

5. 配置项目

在选择 maven_archetype_web 原型后,如上图所示,项目中默认只有 src/main/resources 这个 Source Floder,还需要添加 src/main/java、src/test/java 和src/test/resources 这三个 Source Floder。右键项目根目录点击 New→Source Folder,建出这三个文件夹。

newmaven6.png

可能只有 src/test/resources 的 Source Folder 可以创建,

newmaven72.png

而添加 src/main/java、src/test/java 的 Source Floder 时可能会报 The folder is already a source folder 的错误。如下图所示。

newmaven75.png

分析原因:右键项目→Properties→Java Build Path→Source 标签,会看到 src/main/java, src/test/java 已存在,但是后面的括号中的内容为 missing。所以只需要创建目录,Source Floder 应该就会出现了。

newmaven76.png

解决办法:使用 Navigator 视图(如果 Package Explorer 标签旁边没有Navigator标签,那么 Preferences→Show View→Navigator 即可显示 Navigator 标签)直接建立文件夹。比如创建 src/main/java:选择 Navigator 视图→右键目录树中的 src/main 目录→New→Folder(在现有的 src/main 目录下直接创建 java 子目录),如下图所示。

newmaven7.png
newmaven77.png

最终在 Package Explorer 视图中要有前面说过的四个 Source Folder,如下图所示。

newmaven78.png

6. 更改编译输出文件的存放目录

右键项目→Build Path→Configure Build Path→Source 标签,

newmaven74.png

Source 标签中应该有下面 4 个已经创建的文件夹:

  • src/main/java
  • src/main/resources
  • src/test/java
  • src/test/resources

勾选上最下面的 Allow output folders for source folders 复选框来允许为 Source Folder 创建输出文件夹。然后双击每个 Source Folder 文件夹下的 Output folder(有的 Source Folder 使用最下方的 Browse... 按钮左边的 Default output folder 作为默认的编译输出文件夹),按如下规则选择输出目录:

  • src/main/java 和 src/main/resources,选择 target/classes;
  • src/test/java 和 src/test/resources,选择 target/test-classes;
newmaven79.png

注意:target/classes 和 target/test-classes 目录存放着编译输出的“.class”文件即相关配置文件,这些“.class”文件和配置文件也是按照相应的包结构存放的。

如果需要更改文件夹显示的顺序:通过 Order and Export 标签进行排序即可。

更改 JRE 版本:点击 Libraries 标签→双击 JRE System Library,选择合适的(Maven 构建 Web 工程需要使用 JDK 安装目录下私有 JRE,即“Jdk_Installed_Directory/jre”,而不能是公共 JRE,关于私有 JRE 和公共 JRE 的区别请参考 Oracle 官网上关于 Private Versus Public JRE 的介绍)、较新的 JRE版本。

newmaven710.png

关于 JRE 的设置,可通过点击 Installed JREs...按钮→通过 Add.. 按钮(或 Edit... 按钮)来添加系统中已安装(或编辑已添加)的 JRE,可以指定系统中已安装 JRE的路径(JRE home)和 JRE 的别名(JRE name),当然也可以复制(通过 Duplicate... 按钮)和删除(通过 Remove... 按钮)已添加的 JRE。如下图所示。

newmaven711.png

7. 把项目变成 Dynamic Web 项目

如果是 Spring Boot 项目,可以省略该该步骤。

右键项目,选择 Properties→Project Facets,点击 Convert to faceted form... 按钮。取消 Dynamic Web Module 复选框的勾选(否则更改其版本时下面会提示 Cannot change version of project facet Dynamic Web Module to X.x 的错误),将其版本改为 3.0(需要 1.6 及以上的 JDK),然后将Java的版本改为 1.8,点击 Apply 按钮。

newmaven713.png

再勾选 Dynamic Web Module 复选框,点击下方弹出的 Further configuration available... 临时按钮,在弹出的对话框中将 Content directory 改为src/main/webapp,同时勾选 Generate web.xml deployment descriptor 复选框来生成 web.xml 配置文件,依次点击 OK、Apply 和 OK 按钮。如下图所示。

newmaven714.png

如果提示错误,可能需要在 Java Compiler 设置 Compiler compliance level 为 1.6 或更高,或者需要在此窗口的 Java 的 Version 改成 1.6(Dynamic Web Module 为 3.0 时)或更高。

8. 设置部署程序集(Web Deployment Assembly)

再次打开当前项目的 Properties 窗口,点击左侧列表中 Deployment Assembly,此处显示的列表是,部署项目时,文件发布的路径。如下图所示。

newmaven715.png

删除名称中含有 test 的文件夹,因为 test 是测试使用,并不需要部署。然后依次点击 Apply 和 OK 按钮。置完成效果如下图所示。

newmaven716.png

9. 构建框架:在 pom.xml 中添加所需要的 jar 包(依赖和插件)

双击项目中的 pom.xml 文件,默认使用 Maven POM Editor 打开 pom.xml 文件,选择 Dependencies 标签,在 Dependencies 栏目点击 Add 按钮,首先弹出一个搜索按钮,例如输入 javax.servlet,就会自动搜索关于 servlet 相关的 jar 包,可以很方便的地选择使用比较多的版本的jar包,还可以通过 Scope 来指定 jar 包的作用范围。如下图所示。

newmaven718.png

需要添加的其他 jar 包有:junit、jstl。或者点击 pom.xml 标签直接编辑 pom.xml 文件,这样可以直接粘贴从 Maven 仓库(通过 Maven 仓库,我们可以搜索各种版本的jar包)中复制过来 dependency 内容。这里给出我们的 pom.xml 内容:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.rosydawn.maven.demo</groupId>
  <artifactId>maven-web-demo</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>maven-web-demo Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>maven-web-demo</finalName>
  </build>
</project>

10. 运行

通过 Tomcat 插件运行

右键项目→ Run As → Maven install → 右键项目 → Run As → Package,生成完后 Run As → Run on Servers 即可。

也可以使用 Tomcat 的 Maven 插件,在 pom.xml 文件中添加该插件后,即可通过该插件运行 Web 项目。可通过在 pom.xml 文件的 <bulid> 元素中添加以下内容来添加该插件。如以下代码所示:

  <build>
    <finalName>maven-web-demo</finalName>
    <plugins>
        <plugin>
          <groupId>org.apache.tomcat.maven</groupId>
          <artifactId>tomcat7-maven-plugin</artifactId>
          <version>2.2</version>
          <configuration>
                <port>9999</port><!-- 定义程序运行端口 -->
                <path>/</path><!-- 定义程序映射目录 -->
                <urlEncoding>utf8</urlEncoding><!--解决url乱码 -->
          </configuration>
        </plugin>
      </plugins>
  </build>

添加完该插件后,通过右键项目→ Run As → Maven build...,如下图所示。

newmaven8.png

然后在弹出的对话框的 Goals 栏中填写 tomcat7:run,Name 栏为默认的运行配置名称。后续再运行该项目时,可在接选中项目后,如下图所示,

newmaven9.png

点击工具栏运行按钮,选择初次运行该项目时默认运行配置名称(即 maven-web-demo)即可运行该项目了。

通过 Jetty 插件运行

Tomcat 的 Maven 插件只支持到 Tomcat 7,从 2013 年到现在(2021 年)一直没有再更新过,不建议使用。可以考虑使用 Jetty 的 Maven 插件,如下所示。

  <build>
    <finalName>maven-web-demo</finalName>
    <plugins>
        <!--Jetty 9.x插件。You should use Maven 3.3+ for this plugin-->
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.2.25.v20180606</version>
                <!--<version>9.3.24.v20180605</version>-->
                <!--<version>9.4.11.v20180605</version>-->
                <configuration>
                    <!--可选。httpConnector元素用于配置connector-->
                    <!--如果没有指定该元素,则会默认创建一个监听8080端口的ServerConnector。也可以通过标准的jetty xml配置文件
                    来设置connector,然后在jettyXml元素中引入这些配置文件-->
                    <httpConnector>
                        <!--port元素指定connector的监听端口。默认为8080-->
                        <port>8080</port>

                        <!--host元素指定connector监听的接口。默认监听所有接口-->
                        <!--<host>localhost</host>-->

                        <!--name元素指定connector名称。在配置特定connector的响应上下文时有用-->
                        <!--<name>jetty-connector</name>-->

                        <!--idleTimeout元素指定连接的最大空闲时间-->
                        <!--<idleTimeout>1800</idleTimeout>-->

                        <!--soLinger元素设置socket linger时间-->
                        <!--<soLinger>0</soLinger>-->
                    </httpConnector>

                    <!--可选。jettyXml元素指定逗号分隔的jetty xml文件列表,用于配置其他jetty信息,功能强大-->
                    <!--jetty-context.xml文件配置忽略代码校验,以免jetty启动很慢-->
                    <jettyXml>${project.basedir}/src/main/webapp/WEB-INF/jetty-context.xml</jettyXml>

                    <!--可选。scanIntervalSeconds元素设置检查是否发生变更以及如果有变更就自动热部署的时间间隔-->
                    <!-- if you save changes and recompile your class files, Jetty redeploys your webapp, and you can
                    instantly test the changes you just made-->
                    <!--默认为0,表示不进行变更检查和自动热部署-->
                    <scanIntervalSeconds>5</scanIntervalSeconds>

                    <!--可选。reload元素设置内容改变后是否自动重新加载和部署。默认为automatic,结合scanIntervalSeconds元素的非零值使用。-->
                    <!--设置为manual将忽略scanIntervalSeconds元素的设置-->
                    <!--<reload>manual</reload>-->

                    <!--可选。dumpOnStart元素设置在启动时是否清空容器(dump out the server structure)。默认为false-->
                    <!--<dumpOnStart>true</dumpOnStart>-->

                    <!--可选。loginServices元素可配置多个org.eclipse.jetty.security.LoginService实现。注意,并没有默认
                    的realm,如果你在web.xml中用到了一个realm,可以在这里指定相关的realm。也可以通过标准的jetty xml配置文件
                    来设置connector,然后在jettyXml元素中引入这些配置文件-->
                    <!--<loginServices>
                        <loginService implementation="org.eclipse.jetty.security.HashLoginService">
                            <name>Test Realm</name>
                            <config>${basedir}/src/etc/realm.properties</config>
                        </loginService>
                    </loginServices>-->

                    <!--可选。requestLog元素指定一个org.eclipse.jetty.server.RequestLog实现类。还可以有其他三种方式来配置:
                    jetty xml文件和jettyXml元素,context xml文件和contextXml元素,webApp元素-->
                    <requestLog implementation="org.eclipse.jetty.server.NCSARequestLog">
                        <filename>target/access-yyyy_mm_dd.log</filename>
                        <filenameDateFormat>yyyy_MM_dd</filenameDateFormat>
                        <logDateFormat>yyyy-MM-dd HH:mm:ss</logDateFormat>
                        <logTimeZone>GMT+8:00</logTimeZone>
                        <append>true</append>
                        <logServer>true</logServer>
                        <retainDays>120</retainDays>
                        <logCookies>true</logCookies>
                    </requestLog>

                    <!--自Jetty 9.3.1版本开始可选。配置一个org.eclipse.jetty.server.Server实例。
                    一般不用设置该元素,尤其是使用了jettyXml元素的情况下(在jetty xml中就可以配置Server)。
                    如果同时配置了两者,那么jetty xml文件将会覆盖pom.xml配置-->
                    <!--<server></server>-->

                    <!--可选。stopPort元素指定接收stop命令的端口。与jetty:stop或jetty:run-forked目标一起使用时有用-->
                    <stopPort>9966</stopPort>
                    <!--可选。stopKey元素和stopPort元素配合使用,用于指定发送到关闭端口的关闭命令的字符串,从而来验证stop命令。 -->
                    <stopKey>shutdown</stopKey>

                    <!--可选。systemProperties元素用于配置该插件运行时的系统属性-->
                    <!--<systemProperties>
                        <systemProperty>
                            <name>foo_prop</name>
                            <value>bar_value</value>
                        </systemProperty>
                    </systemProperties>-->

                    <!--可选。systemPropertiesFile指定指定一个包含该插件运行时的系统属性的文件。
                    这里设置的系统属性默认不会覆盖命令行、JVM和systemProperties元素指定的系统属性,也可以设置为强制覆盖-->
                    <!--<systemPropertiesFile></systemPropertiesFile>-->

                    <!--可选。skip元素用于设置是否执行该插件,默认为false。与在命令行设置-Djetty.skip系统属性有相同效果。
                    在集成测试中想要跳过测试时这样配置jetty很有用-->
                    <!--<skip>true</skip>-->

                    <!--默认为false。如果为true,则会将<scope>provided</scope>类型的依赖添加到容器的类路径中,一般都会使用容
                    器已经提供的依赖,所以,一般都不用配置该元素。除非容器提供的依赖达不到使用要求-->
                    <!--<useProvidedScope>true</useProvidedScope>-->

                    <!--可选。excludedGoals元素指定不执行的Jetty插件的目标列表-->
                    <!--<excludedGoals>run,run-exploded</excludedGoals>-->

                    <!--忽略代码校验,以免 Jetty 启动很慢。-->
                    <contextXml>${project.basedir}/src/main/webapp/WEB-INF/jetty-context.xml</contextXml>

                    <!-- 指定系统属性。这里配置的属性不会覆盖命令行和JVM指定的属性,仅用于补充两者配置的属性。 -->
                    <!--<systemProperties>
                        <systemProperty>
                            <name>foo_prop</name>
                            <value>bar_value</value>
                        </systemProperty>
                    </systemProperties>-->
                    <!-- 也可以选择使用属性文件类配置系统属性。这里配置的属性不会覆盖命令行、JVM和systemProperties指定的属性,
                    仅用于补充三者配置的属性。-->
                    <!--<systemPropertiesFile>${project.basedir}/my.props</systemPropertiesFile>-->

                    <webApp>
                        <!-- 设置项目的ContextPath,默认为“/${project.artifactId}”。 -->
                        <contextPath>/${project.artifactId}</contextPath>
                        <!-- Jetty提供静态资源的多个目录,用来替换baseResource元素。 -->
                        <resourceBases>
                            <resourceBase>${project.basedir}/src/main/webapp</resourceBase>
                            <!--<resourceBase>${project.basedir}/commons</resourceBase>-->
                        </resourceBases>
                        <!-- 指定一个jetty-env.xml文件的路径,在该文件中可使用JNDI。
                         确定该文件打包进classpath中,如果把该文件放在测试目录就不行。-->
                        <jettyEnvXml>${project.basedir}/src/main/webapp/WEB-INF/jetty-env.xml</jettyEnvXml>
                    </webApp>
                </configuration>
            </plugin>

            <!--Jetty 7.x or Jetty 8.x插件。You will need to use maven 3 from jetty-7.5.3 release going forwards-->
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>8.1.16.v20140903</version>
                <configuration>
                    <!--可选。connectors元素指定一个org.eclipse.jetty.server.Connector对象(jetty的端口监听器)列表。如果没有指定,
                    则会默认在8080端口上配置一个NIO org.eclipse.jetty.server.nio.SelectChannelConnector对象。也可以在标准
                    jetty xml文件里配置connectors,然后在jettyXml元素中引用该配置文件-->
                    <connectors>
                        <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
                            <!-- 可通过命令行指令“mvn -Djetty.port=9999 jetty:run” 来设置jetty.port系统属性更改默认端口。 -->
                            <port>8080</port>
                            <maxIdleTime>60000</maxIdleTime>
                        </connector>
                        <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
                            <port>9090</port>
                            <maxIdleTime>60000</maxIdleTime>
                        </connector>
                    </connectors>

                    <!--可选。jettyXml元素指定逗号分隔的jetty xml文件列表,用于配置其他jetty信息,功能强大-->
                    <!--jetty-context.xml文件配置忽略代码校验,以免jetty启动很慢-->
                    <jettyXml>${project.basedir}/src/main/webapp/WEB-INF/jetty-context.xml</jettyXml>

                    <!--可选。scanIntervalSeconds元素设置检查是否发生变更以及如果有变更就自动热部署的时间间隔-->
                    <!-- if you save changes and recompile your class files(you can use IDE auto build function),
                    Jetty redeploys your webapp, and instantly test the changes you just made-->
                    <!--默认为0,表示不进行变更检查和自动热部署-->
                    <scanIntervalSeconds>5</scanIntervalSeconds>

                    <!--可选。systemProperties元素用于配置该插件运行时的系统属性-->
                    <!--<systemProperties>
                        <systemProperty>
                            <name>foo_prop</name>
                            <value>bar_value</value>
                        </systemProperty>
                    </systemProperties>-->
                    <!--可选。systemPropertiesFile指定指定一个包含该插件运行时的系统属性的文件。这里设置的系统属性默认不会覆盖命令
                    行、JVM和systemProperties元素指定的系统属性,仅用于补充三者配置的属性,也可以设置为强制覆盖-->
                    <!--<systemPropertiesFile>${basedir}/my.props</systemPropertiesFile>-->

                    <!--可选。skip元素用于设置是否执行该插件,默认为false。与在命令行设置-Djetty.skip系统属性有相同效果。
                    这在集成测试中配置jetty跳过测试时很有用-->
                    <!--<skip>true</skip>-->

                    <!--可选。loginServices元素可配置多个org.eclipse.jetty.security.LoginService实现。注意,并没有默认
                    的realm,如果你在web.xml中用到了一个realm,可以在这里指定相关的realm。也可以通过标准的jetty xml配置文件
                    来设置connector,然后在jettyXml元素中引入这些配置文件-->
                    <!--<loginServices>
                        <loginService implementation="org.eclipse.jetty.security.HashLoginService">
                            <name>Test Realm</name>
                            <config>${basedir}/src/etc/realm.properties</config>
                        </loginService>
                    </loginServices>-->

                    <!--可选。requestLog元素指定一个org.eclipse.jetty.server.RequestLog实现类。还可以有其他三种方式来配置:
                    jetty xml文件和jettyXml元素,context xml文件和contextXml元素,webApp元素-->
                    <requestLog implementation="org.eclipse.jetty.server.NCSARequestLog">
                        <filename>target/access-yyyy_mm_dd.log</filename>
                        <filenameDateFormat>yyyy_MM_dd</filenameDateFormat>
                        <logDateFormat>yyyy-MM-dd HH:mm:ss</logDateFormat>
                        <logTimeZone>GMT+8:00</logTimeZone>
                        <append>true</append>
                        <logServer>true</logServer>
                        <retainDays>120</retainDays>
                        <logCookies>true</logCookies>
                    </requestLog>

                    <!--可选。stopPort元素指定接收stop命令的端口。与jetty:stop或jetty:run-forked目标一起使用时有用-->
                    <stopPort>9966</stopPort>
                    <!--可选。stopKey元素和stopPort元素配合使用,用于指定发送到关闭端口的关闭命令的字符串,从而来验证stop命令。 -->
                    <stopKey>shutdown</stopKey>

                    <!--可选。scanIntervalSeconds元素设置检查是否发生变更以及如果有变更就自动热部署的时间间隔-->
                    <!-- if you save changes and recompile your class files, Jetty redeploys your webapp, and you can
                    instantly test the changes you just made-->
                    <!--默认为0,表示不进行变更检查和自动热部署-->
                    <scanIntervalSeconds>5</scanIntervalSeconds>

                    <!--可选。reload元素设置内容改变后是否自动重新加载和部署。默认为automatic,结合scanIntervalSeconds元素的非零值使用。-->
                    <!--设置为manual将忽略scanIntervalSeconds元素的设置-->
                    <!--<reload>manual</reload>-->

                    <!--忽略代码校验,以免 Jetty 启动很慢。-->
                    <contextXml>${project.basedir}/src/main/webapp/WEB-INF/jetty-context.xml</contextXml>
                    <!--<dumpOnStart>true</dumpOnStart>-->

                    <!--可选。systemProperties元素用于配置该插件运行时的系统属性-->
                    <!--<systemProperties>
                        <systemProperty>
                            <name>foo_prop</name>
                            <value>bar_value</value>
                        </systemProperty>
                    </systemProperties>-->
                    <!--可选。systemPropertiesFile指定指定一个包含该插件运行时的系统属性的文件。这里设置的系统属性默认不会覆盖命令
                    行、JVM和systemProperties元素指定的系统属性,仅用于补充三者配置的属性,也可以设置为强制覆盖-->
                    <!--<systemPropertiesFile>${basedir}/my.props</systemPropertiesFile>-->

                    <!--Configuring Your WebApp-->
                    <!--webApp元素配置一个org.eclipse.jetty.webapp.WebAppContext的扩展,其任何setter方法都可用来配置Web应用-->
                    <webApp>
                        <!-- set the context path for your webapp,default is “/${project.artifactId}”-->
                        <contextPath>/${project.artifactId}</contextPath>

                        <!-- Optional. Location of a jetty-env.xml file, which allows you to make JNDI bindings that
                        satisfies <env-entry>, <resource-env-ref> and <resource-ref> linkages in the web.xml. Note that
                        these can also be made in a <jettyXml> file if you want them to apply to more than one webapp.
                        确保该文件打包进classpath中,如果把该文件放在测试目录就不行。-->
                        <jettyEnvXml>${project.basedir}/src/main/webapp/WEB-INF/jetty-env.xml</jettyEnvXml>

                        <!--The path to a dir that Jetty can use to expand or copy jars and jsp compiles when your
                        webapp is running. The default is ${project.build.outputDirectory}/tmp-->
                        <!--<tempDirectory>${project.build.outputDirectory}/tmp</tempDirectory>-->

                        <!--the path from which Jetty will serve static resources. Defaults to src/main/webapp.-->
                        <!--<baseResource>${project.basedir}/src/main/webapp</baseResource>-->

                        <!-- use instead of <baseResource> if you have multiple dirs from which you want to serve static
                        content. This is an array of dir names.-->
                        <resourceBases>
                            <resourceBase>${project.basedir}/src/main/webapp</resourceBase>
                            <!--<resourceBase>${project.basedir}/commons</resourceBase>-->
                        </resourceBases>

                        <!--The path to the web.xml file for your webapp-->
                        <!--<descriptor>${project.basedir}/src/main/webapp/WEB-INF/web.xml</descriptor>-->

                        <!--The path to a webdefault.xml file that will be applied to your webapp before the web.xml.
                        If none is supplied, Jetty uses a default one baked into the jetty-webapp.jar.-->
                        <!--<defaultsDescriptor></defaultsDescriptor>-->

                        <!--The path to a web.xml file that will be applied after your web.xml is read.
                        You can use this to replace or add configuration.-->
                        <!--<overrideDescriptor></overrideDescriptor>-->

                        <!--Optional. Defaults to "true". Controls whether any overlaid wars are added before or after
                        the original base resource(s) of the webapp.-->
                        <!--<baseAppFirst>true</baseAppFirst>-->

                        <!--Since jetty-8.1.x. Optional. A pattern to match against the urls of the jars on the
                        container path to select those that should be examined for things like META-INF fragments,
                        resources, tlds and class inheritance hierarchy-->
                        <!--<containerIncludeJarPattern></containerIncludeJarPattern>-->

                        <!--Since jetty-8.1.6. Optional. A pattern to match against the urls of the jars considered to
                        be on the webapp's WEB-INF classpath to select those that should be examined for META-INF
                        fragments, resources, tlds, and class inheritance hierarchy. The default is to potentially
                        examine them all, subject to any ordering exclusions configured in web.xml.-->
                        <!--<webInfIncludeJarPattern></webInfIncludeJarPattern>-->
                    </webApp>

                    <!--The location of the built WAR file(jetty:run-war) or the exploded WAR(jetty:run-exploded).
                    This defaults to ${project.build.directory}/${project.build.finalName}[.war]-->
                    <war>${basedir}/target/myApp</war>
                    <!--<war>${basedir}/target/myApp.war</war>-->

                    <!--Optional. The path to a context xml file that is applied to your webapp AFTER the <webApp>.-->
                    <!--<contextXml></contextXml>-->
                </configuration>
            </plugin>
      </plugins>
  </build>

通过 Spring Boot 运行

如果你使用 Spring Boot 开发,那么就不需要使用对应的运行插件了。因为 Spring Boot 的 spring-boot-starter-web 依赖自带较新版本的内嵌 Tomcat,也可以缓存内嵌的 Jetty、Undertower 等 Web 容器。

<dependencies>
    <!-- ... -->
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>x.x.x.RELEASE</version>
    </dependency>
    <!-- ... -->
</dependencies>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139
  • jHipster - 微服务搭建 CC_简书[https://www.jianshu.com/u/be0d56c4...
    quanjj阅读 800评论 0 2
  • 0.首先准备好eclipse IDE. 安装 maven 和tomcat 这些会在别的文章中介绍 1. 打开ecl...
    wangliang0209阅读 899评论 0 2
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,778评论 6 342
  • > > > < < < 阳光正好,坐在窗前,看远处乡间公路上的小车像蚂蚁一样穿行在丛林与群山之间,我的心竟然也是...
    默默huangjuan阅读 424评论 9 8