项目构建工具 maven构建项目目录结构与mvn命令基本使用
1.maven 项目目录结构
项目: |-src |main:主业务逻辑 |-java |-resources :资源目录 |-test: 测试目录 |-java: 测试代码目录 |-resources:测试代码依赖的配置文件 |-target: 包括源码和测试编译输出目录,打包输出目录,测试报告等 |-pom.xml # maven配置文件
2.pom.xml配置文件详解
假如我们的项目需要用到spring jdbc的jar包
<?xml version="1.0" encoding="UTF-8"?> <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"> <modelVersion>4.0.0</modelVersion> <!-- 坐标 --> <groupId>com.mycat</groupId> <artifactId>mvn-test</artifactId> <version>1.0</version> <!-- 大版本.小版本.小幅bug修改--> <!-- GA/RELEASE:稳定版(推荐) BEAT:公测 SNAPSHOT:快照版(不稳定版) --> <properties> <spring.version>4.3.8.RELEASE</spring.version> </properties> <dependencies> <dependency><!-- 配置spring jdbc的依赖 --> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>8</source> <target>8</target> </configuration> </plugin> </plugins> </build> </project>
其中
modelVersion标签声明pom的xml模板的版本,与上面的shcema依赖版本对应,不改。
modelVersion紧接着下面的groupId和artifactId以及version则定义的是本项目打包后在仓库的坐标。
properties标签通常用来定义统一的版本信息,例如上述的<spring.version> 4.3.8.RELEASE <spring.version>配置定义了spring的版本信息,因此下面使用spring-jdbc的坐标时,版本信息${spring.version}则采用的此配置。
dependencies定义了引用的依赖的jar包的坐标的集合,主要引用来源是本地仓库和远程仓库,其中重要仓库引用网址是:https://mvnrepository.com/tags/maven,可以通过该网址直接搜索需要的maven依赖坐标,快速构建项目。
build标签里面主要存放的是编译时的配置,包括插件的配置(plugins)等。
2.maven常用命令的使用
1) 本地创建maven测试项目:
项目结构:
hellomvnuse目录:(项目根目录)(我把无关打印信息删除了)
C:\Users\mycat\Desktop\hellomvnuse>dir 2019/03/01 11:25 701 pom.xml 2019/03/01 11:09 <DIR> src
src目录:(包括主程序目录和测试程序主目录)
C:\Users\mycat\Desktop\hellomvnuse\src>dir 2019/03/01 10:42 <DIR> main 2019/03/01 11:03 <DIR> test
main目录:(主程序目录)
C:\Users\mycat\Desktop\hellomvnuse\src\main>dir 2019/03/01 11:02 <DIR> java
test目录:(测试目录)
C:\Users\mycat\Desktop\hellomvnuse\src\test>dir 2019/03/01 11:04 <DIR> java
而main和test的java目录下均有com目录,com目录下有mycat目录,mycat下有core目录,对于main来说其最里面的core目录中有HelloWorld.java文件,而test最里面的core目录下有TestHelloWorld.java(均为文本编辑器写的)
C:\Users\mycat\Desktop\hellomvnuse\src\main\java\com\mycat\core>dir 2019/03/01 10:46 160 HelloWorld.java
和
C:\Users\mycat\Desktop\hellomvnuse\src\test\java\com\mycat\core>dir 2019/03/01 11:18 153 TestHelloWorld.java
其中HelloWorld.java:
package com.mycat.core; public class HelloWorld{ public static void main(String[] args){ } public static String sayHello(){ return "hello"; } }
而TestHelloWorld.java:(使用单元测试)
package com.mycat.core; import org.junit.*; // 注意需要别忘了添加 public class TestHelloWorld{ @Test public void m(){ System.out.println("Hello World!!!"); } }
由于在测试程序中使用到了Junit4,所以需要在pom.xml中进行配置:
<?xml version="1.0" encoding="UTF-8"?> <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"> <modelVersion>4.0.0</modelVersion> <groupId>com.mycat</groupId> <artifactId>mvn-test</artifactId> <version>1.0</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies> </project>
2)使用mvn的命令进行编译(pom.xml所在目录,即项目根目录下)
对主程序代码执行编译:
mvn compile
显示结果:
C:\Users\mycat\Desktop\hellomvnuse>mvn compile [INFO] Scanning for projects... [INFO] [ 19953 INFO] -------------------------< com.mycat:mvn-test >------------------------- [INFO] Building mvn-test 1.0 [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ mvn-test --- [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:\Users\mycat\Desktop\hellomvnuse\src\main\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ mvn-test --- [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 C:\Users\mycat\Desktop\hellomvnuse\target\classes [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.038 s [INFO] Finished at: 2019-03-01T21:04:42+08:00 [INFO] ------------------------------------------------------------------------
看到 BUILD SUCCESS即代表编译成功。更明显的效果是当前目录下会生成一个target目录,
C:\Users\mycat\Desktop\hellomvnuse\target>dir 2019/03/01 21:04 <DIR> classes 2019/03/01 21:04 <DIR> generated-sources 2019/03/01 21:04 <DIR> maven-status
其中:
classes目录:主程序编译目录generated-sources目录:注解项目编译结果maven-status目录:maven状态插件
对测试代码执行编译:
切换回根目录
mvn test
C:\Users\mycat\Desktop\hellomvnuse>mvn test [INFO] Scanning for projects... [INFO] [INFO] -------------------------< com.mycat:mvn-test >------------------------- [INFO] Building mvn-test 1.0 [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ mvn-test --- [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:\Users\mycat\Desktop\hellomvnuse\src\main\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ mvn-test --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ mvn-test --- [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:\Users\mycat\Desktop\hellomvnuse\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ mvn-test --- [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 C:\Users\mycat\Desktop\hellomvnuse\target\test-classes [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ mvn-test --- [INFO] Surefire report directory: C:\Users\mycat\Desktop\hellomvnuse\target\surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.mycat.core.TestHelloWorld Hello World!!! Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.064 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.911 s [INFO] Finished at: 2019-03-01T21:11:28+08:00 [INFO] ------------------------------------------------------------------------
出现 BUILD SUCCESS即表示成功,同时target目录多了三个目录generated-test-sources, surefire-reports(测试报告), test-classes(测试生成的class字节码文件),我尝试把target删除掉再执行上述命令,发现还是会编译主程序代码,可见这个命令是联通源码一起编译。
C:\Users\mycat\Desktop\hellomvnuse\target>dir 2019/03/01 21:04 <DIR> classes 2019/03/01 21:04 <DIR> generated-sources 2019/03/01 21:11 <DIR> generated-test-sources 2019/03/01 21:04 <DIR> maven-status 2019/03/01 21:11 <DIR> surefire-reports 2019/03/01 21:11 <DIR> test-classes
接下来(清空编译结果 => 最直观的结果是清空target目录,并删除target目录):
mvn clean
打成jar包:(
中间clean可省,此处是为了演示清空编译后重新编译再打包)(命令配合着使用)
mvn clean package
C:\Users\mycat\Desktop\hellomvnuse>mvn clean package[INFO] Scanning for projects... [INFO] [INFO] -------------------------< com.mycat:mvn-test >------------------------- [INFO] Building mvn-test 1.0 [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ mvn-test --- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ mvn-test --- [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:\Users\mycat\Desktop\hellomvnuse\src\main\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ mvn-test --- [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 C:\Users\mycat\Desktop\hellomvnuse\target\classes [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ mvn-test --- [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:\Users\mycat\Desktop\hellomvnuse\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ mvn-test --- [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 C:\Users\mycat\Desktop\hellomvnuse\target\test-classes [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ mvn-test --- [INFO] Surefire report directory: C:\Users\mycat\Desktop\hellomvnuse\target\surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.mycat.core.TestHelloWorld Hello World!!! Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.067 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ mvn-test --- [INFO] Building jar: C:\Users\mycat\Desktop\hellomvnuse\target\mvn-test-1.0.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.204 s [INFO] Finished at: 2019-03-01T21:22:00+08:00 [INFO] ------------------------------------------------------------------------
此项打包的动作:先编译主程序源码,再编译测试程序,然后运行,最后执行打包。但是很多时候是不需要对测试程序进行测试的。
使用下面命令跳过测试进行打包:
mvn package -Dmaven.test.skip=true
注:
mvn pakage 打包,动态 web工程打 war包,Java工程打 jar 包。
最后:
mvn install
该命令的作用是将本项目打包后发布到本地maven仓库,以便别的模块调用
- 菜鸟教程之工具使用(二)——Maven打包非规范目录结构的Web项目
- 使用Maven构建Web项目的目录结构
- 使用maven构建项目生成特定的目录结构
- 菜鸟教程之工具使用(二)——Maven打包非规范目录结构的Web项目
- 使用maven构建基本的web项目结构
- 使用Maven构建Web项目的目录结构
- Java项目开发环境构建工具 Gradle 使用笔记(简单、基本)
- 使用mvn命令构建java项目
- Java项目开发环境构建工具 Gradle 使用笔记(简单、基本)
- Maven项目构建工具使用
- 3、Maven的项目的目录结构简介和一些常用命令
- m2eclipse简单使用,创建Maven项目 ,运行mvn命令
- 使用Ant进行项目构建之二:规划我们的项目目录结构 (转载)
- maven 构建项目1. 首先看下maven项目的标准目录结构:
- scala构建工具SBT的使用_目录结构
- 使用Jenkins启动maven作为项目构建管理工具的web项目
- Java项目开发环境构建工具 Gradle 使用笔记(简单、基本)
- Struts2框架基本构建,Maven工具使用以及搭建私服,Hbernate框架构建以及连接mysql数据库
- Maven--项目构建工具的使用
- 在eclipse中使用maven工具构建项目