Maven-入门案例
来源:互联网 发布:淘宝网拍 编辑:程序博客网 时间:2024/06/18 07:18
maven项目工程目录约定
使用maven创建的工程称为maven工程,maven工程具有一定的目录规范
- src/main/java:存放项目的.java文件
- src/main/resources:存放项目资源文件,如spring,hibernate配置文件
- src/main/webapp:webapp目录是web工程的主目录
- src/main/webapp/WEB-INF
- src/main/webapp/WEB-INF/web.xml
- src/test/java:存放所有测试.java文件,如JUnit测试类
- src/test/resources:测试资源文件
- target:项目输出位置,存放一些.class文件
- pom.xml:maven项目核心配置文件
例子
建立如下目录结构
- example
- src
- main
- java
- resources
- test
- java
- resources
- main
- target
- pom.xml
- src
在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.HelloTestTests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.06 secResults :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.HelloTestTests 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.HelloTestTests 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)
- maven入门案例
- Maven-入门案例
- Eclipese下Maven+Jersey+Tomcat入门案例
- 入门案例
- Maven 创建jetty 案例
- maven 入门
- maven 入门
- MAVEN 入门
- Maven入门
- maven入门
- maven入门
- Maven 入门
- Maven入门
- maven 入门
- Maven入门
- maven入门
- maven 入门
- maven入门
- 遇到的面试问题总结
- LeetCode
- jupyter notebook 的工作空间设置
- PAT_A 1047. Student List for Course (25)
- DHTML(Dynamic HTML)--1表格的增删改
- Maven-入门案例
- 九度[1465]-最简真分数
- Window系统Apache2.4+Tomcat7.0整合配置
- KD树
- Ubuntu16.04安装nvidia中的一些坑
- 年终总结——一个阶段的结束,另一个阶段的开始
- MBP下的新手挖坑--Tomcat
- tq2440 adc 驱动
- django配置mysql数据库