Maven-入门案例

xiaoxiao2021-02-28  114

maven项目工程目录约定

使用maven创建的工程称为maven工程,maven工程具有一定的目录规范

src/main/java:存放项目的.java文件src/main/resources:存放项目资源文件,如spring,hibernate配置文件src/main/webapp:webapp目录是web工程的主目录src/main/webapp/WEB-INFsrc/main/webapp/WEB-INF/web.xmlsrc/test/java:存放所有测试.java文件,如JUnit测试类src/test/resources:测试资源文件target:项目输出位置,存放一些.class文件pom.xml:maven项目核心配置文件

例子

建立如下目录结构

example src main javaresourcestest javaresourcestargetpom.xml

在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/xsd/maven-4.0.0.xsd"> <!-- 模型版本号:4.0.0 --> <modelVersion>4.0.0</modelVersion> <!-- 群组ID:单位域名反写 --> <groupId>cn.eaglezsx.maven</groupId> <!-- 项目ID:一个单位只有一个域名,但是一个单位可以做多个项目 --> <artifactId>HelloWorld</artifactId> <!-- 当前项目版本号:每个工程发布后可以发布多个版本,依赖时调取不同的版本,使用不同的版本号 --> <version>0.0.1</version> <!-- 名称:可省略 --> <name>Hello</name> <!-- 依赖管理 --> <dependencies> <!-- 依赖设置 --> <dependency> <!-- 依赖组织名称 --> <groupId>junit</groupId> <!-- 依赖项目名称 --> <artifactId>junit</artifactId> <!-- 依赖版本名称 --> <version>4.9</version> <!-- 依赖范围:test包下依赖该设置 --> <scope>test</scope> </dependency> </dependencies> </project>

在src/main/java/cn/eaglezsx目录下新建文件Hello.java

package cn.eaglezsx; public class Hello { public String sayHello(String name){ return "Hello " + name + "!"; } }

在src/test/java/cn/eaglezsx中建立一个测试程序,HelloTest.java

package cn.eaglezsx; import org.junit.Test; import junit.framework.*; public class HelloTest { @Test public void testHello(){ Hello hello = new Hello(); String results = hello.sayHello("maven"); //断言测试 Assert.assertEquals("Hello maven!",results);//第一个值是预计的值,第二个值是真实返回的值 } }

然后打开cmd,进入到example文件中,输入mvn compile,进行编译。期间会下载很多东西(这个命令相关的插件(插件其实也是jar包,一段程序)和一些jar包)

最后的显示信息中有BUILD SUCCESS就说明编译成功了

[INFO] Changes detected - recompiling the module! [WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent! [INFO] Compiling 1 source file to E:\example\target\classes [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 17.245 s [INFO] Finished at: 2017-04-18T20:40:00+08:00 [INFO] Final Memory: 11M/29M [INFO] ------------------------------------------------------------------------

之后可以在E:\example\target\classes\cn\eaglezsx文件目录中看到编译后的结果Hello.class。

之后输入mvn clean会把target文件删除掉

再输入mvn compile,target又会生成出来。其实这个文件不需要手动创建的,会自动生成的。

也可以直接输入 mvn clean compile,这样就会在清除之后就编译。

之后输入mvn test,开始也会下载一堆东西,最后显示

Running cn.eaglezsx.HelloTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.06 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.476 s [INFO] Finished at: 2017-04-18T20:56:28+08:00 [INFO] Final Memory: 7M/21M [INFO] ------------------------------------------------------------------------

里边写着测试结果,这个测试结果显示说,没有问题。

如果我把HelloTest.java中的”Hello maven!”字符改成”Hello maven1!”的话,再次测试的时候,测试结果就为

Running cn.eaglezsx.HelloTest Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.063 sec <<< FAILURE! testHello(cn.eaglezsx.HelloTest) Time elapsed: 0.011 sec <<< FAILURE! junit.framework.ComparisonFailure: expected:<Hello maven[1]!> but was:<Hello maven[]!>

测试报告中显示测试失败(Failures),并给出了失败的地方<Hello maven[1]!> but was:<Hello maven[]!>预期目标比实际目标多了一个1。两者不相同

Errors就是程序出现了错误,比如我在HelloTest.java中填了一句int i=1/0;测试结果就为

Running cn.eaglezsx.HelloTest Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.059 sec <<< FAILURE! testHello(cn.eaglezsx.HelloTest) Time elapsed: 0.009 sec <<< ERROR! java.lang.ArithmeticException: / by zero

有一处错误(Errors),是java.lang.ArithmeticException: / by zero(除零异常)

Skipped,跳过,就是说这个东西没有执行。

E:\example\target\surefire-reports中有相关的测试报告。

之后输入mvn package,打包。输入这条命令之后,会先测试一下,测试成功后才会打包。

打包之后在target中多了一个HelloWorld-0.0.1.jar.

之后输入mvn install,发布。发布之后,就可以在D:\Java\maven\repository\cn\eaglezsx\maven\HelloWorld\0.0.1中看到HelloWorld-0.0.1.jar这个文件了。发布之后大家就都可以用了。

总结一下构建的过程

清理(mvn clean),编译(mvn compile),测试(mvn test),报告,打包(mvn package), 部署(mvn install)

这么开发太累了。我们可以把maven集成到eclipse。

将maven集成到Eclipse

使用eclipse mars 2版本,此版本自带maven插件不用单独安装。

指定maven的安装目录,eclipse mars 2中已经内容了maven3.3.3版本,项目为了统一maven的版本不会使用eclipse内置的maven版本。

Window–》Preferences–》Maven–》Installations–》Add 然后找到maven的安装目录。

Window–》Preferences–》Maven–》User Settings 设置User Settings,找到本地仓库中settings.xml文件的位置。

如果修改了setting.xml文件需要点击Update Settings按钮对本地仓库重建索引,点击Reindex。

maven配置完成需要测试在eclipse中是否可以浏览maven的本地仓库,如果可以正常浏览maven本地仓库则说明ecplise集成maven已经完成。

找到Maven Repositories这个视图,找到Local respository,右键,Rebuild index重建索引,重建索引完成点击前边的“+”图标即可查看本地仓库的内容。

在Eclipse中构建maven工程

创建maven工程

File–>New–>Project…–>Maven Project点击下一步,

在Create a simple project(skip archetype selection)前边打上对勾

如果不跳过骨架,创建的maven工程目录不全,这里跳过骨架。当我们不跳过骨架点击“next”会进入骨架选择页面,如果eclipse中配置本地仓库正确则显示出骨架。选择webapp会创建一个maven工程(java web工程),选择quickstart会创建一个maven工程(java工程)。注意:使用骨架的问题是创建的maven工程目录不完整,所以不推荐使用,所以这里创建maven工程统一跳过骨架。

定义坐标

Group Id:cn.eaglezsx.maven

Artifact Id:maven-web-0120

Packaging:war(这里选择war,对web工程将要打成war包)

建立好项目之后,会报红叉,这时候需要手动添加一个WEB-INF/web.xml,添加web.xml,在src/main/webapp中添加WEB-INF/web.xml文件

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>

设置编译版本,这里需要使用maven的插件来设置,在pom.xml中加入(插件写在build标签的plugins标签里边)

<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build>

设置完编译版本之后,会报红叉,因为系统不知道,需要通知他一下,项目右击–>Maven–>Update Project Configuration,红叉即消失,并且会发现JRE System Library变成1.7。

添加servlet/jsp的jar包,在pom.xml中添加(依赖添加在dependencies标签里边)

<!-- 添加servlet-api,jsp-api --> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> </dependencies>

编写servlet,在src/main/java中创建ServletTest.java,包名为cn.eaglezsx.maven.servlet

public class ServletTest extends HttpServlet{ @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().write("Hello World"); } @Override public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req,resp); } }

在web.xml中配置servlet

<!-- 配置servlet --> <servlet> <servlet-name>servletTest</servlet-name> <servlet-class>cn.eaglezsx.maven.servlet.ServletTest</servlet-class> </servlet> <servlet-mapping> <servlet-name>servletTest</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping>

项目右键,Run As,Maven build…,在Goals中输入tomcat:run,点击Run

maven内置tomcat的插件(org.codehaus.mojo.tomcat-maven-plugin),执行tomcat:run命令即可启动tomcat。

当控制台显示出“信息: Starting Coyote HTTP/1.1 on http-8080”代表项目启动成功。

之后在浏览器中访问http://localhost:8080/w/test

会在浏览器中显示Hello World

以后再启动的时候直接在菜单栏中的Run As按钮中选择项目名启动即可,没必要再在Maven build…里边再配一个tomcat:run了。

想看配置过的一些东西,可以在Run,Run Configurations..里边看到。

Run as采用mvn命令运行,Debug as采用mvnDebug命令调试方式运行(可打断点)

Maven clean :清理target目录Maven test:执行单元测试Maven install:将工程打包后发布到本地仓库Maven build:将项目启动(就相当于在菜单栏中的Run As按钮中选择项目名启动)Maven build…:手动输入命令内容(在Goals里边输入,不用输入mvn)
转载请注明原文地址: https://www.6miu.com/read-61919.html

最新回复(0)