发表于: 2018-04-05 17:40:00
1 457
Eighteenth Day
今日任务:
Maven 学习
学习轨迹:
重新认识 maven
构建最简单的 Maven 工程
1. 创建 hello-world 文件夹, 在 hello-world 文件夹下面创建 pom.xml 文件, 并编写内容
pom.xml 文件中最重要的字段是 groupId artifactId version 。 这三个元素定义了一个项目的基本坐标,在Maven中,任何的jar、pom或者war都是基于这些基本的坐标进行区分。
同时,注意一点,到目前为止没有任何的Java实际代码,这很好的做到了项目对象模型与Java实际代码相互独立(解耦,正交)。这样做,在很大程度上避免了Java代码和POM代码之间的相互影响。
比如,当前项目如果要升级,那么只需要修改POM,而不需要修改Java代码。反之,如果POM稳定之后,Java开发工作也不会涉及到POM的修改。
xsd:https://en.wikipedia.org/wiki/XML_Schema_(W3C)
2. 编写Java代码并通过 maven 清理和编译
在项目中代码分为两种:主要代码和测试代码。
主代码会被带包到最终的构件中(jar包),而测试代码只会在运行测试的时候用到,不会被打包。
默认情况下Maven假设项目主代码位于src/main/java 目录。所以在该目录下创建com/mycompany/myapp/helloworld/HelloWorld.java
HelloWorld 类很简单,sayHello() 方法返回 String, main 方法创建HelloWorld实例,然后调用sayHello() 方法,输出信息到控制台。
这里有两点要注意:
A. Java 主代码要放到 src/main/java 目录下(maven约定),不需要额外配置, maven会自动搜索该目录找到项目主代码;
B. 该Java类包名是 com.mycompany.myapp.helloworld 这与上面定义的groupId 和 artifactId 相对应。
接下来执行 mvn clean compile
首先执行了 clean 任务,之后执行resources任务,没有resource,跳过,最后执行 compile 任务,生成目标文件。这三个任务分别对应了三个插件
有两个警告,看着是编码的警告暂时忽略吧。
目录发生的变化:
至此,Maven在没有任何额外的配置下执行了项目的清理和编译任务。
第一次执行 mvn clean compile 没有target 看不出 clean的想过,再执行一次:可以看到 删除了目录下的target。
3. 编写测试代码JUnit
为了使项目结构清晰,主代码和测试代码要分目录存放。
Maven 默认的主代码目录在 src/main/java ,与之对应的默认测试代码目录是 src/test/java. so,先创建该目录
这里测试使用 Ken Beck 和 Erich Gamma 建立的 JUnit。首先要为 Hello World 项目添加 JUnit 依赖,修改项目的 POM 代码
编写测试代码,在 src/test/java 目录下创建文件
编写单元测试步骤:
① 准备测试类及数据;(测试类 HelloWorld)
② 执行要测试的行为; (执行 sayHello() 方法)
③ 检查结果; (通过 断言 检查结果是否是我们期望的 Hello Maven)
接下来执行 mvn clean test:
开始先下载了测试依赖包
然后执行 clean -> resources -> compile -> testResources -> testCompile ,这里由于疏忽,将测试类中的HelloWorld中的方法写成了 sayHell()导致测试失败。
修改,在此执行 mvn clean test, 这次成功执行,并且比上次多了一步 test 任务,因为上次在 testCompile中就因为 sayHell() 方法终止,这里 test 任务的执行插件为: maven-surefire-plugin
测试结果就是: run: 1,Failures: 0, Errors: 0, Skipped: 0
测试通过 Nice,哈哈,虽然没什么卵用 ...
4. 打包和测试
将项目进行编译和测试之后,剩下的就是打包了(package)。
POM 中没有指定打包的类型,默认为jar包。
简单的执行:mvn clean package 就可以打包了:
类似的,在执行打包的时候,maven也会执行编译和测试操作。
jar 任务,通过 maven-jar-plugin 插件,打出了 hello-world-1.0-SNAPSHOT.jar 包,在 target目录下。
这里的命名是根据artifact-version.jar 规则输出
到这里,打出的 jar 就可以了拷贝到其他项目中使用了。
创建工程 testHello ,将 target下的jar引入,测试使用,这里遇到一个问题系统好像也有一个HelloWorld 类搞了大半天,妮玛
这个时候看 jar 包中的 MAINIFEST.MF 文件是没有main方法的,所有 jar 包不能单独执行需要重新配置
为了让 打出的 jar 包能够执行,所以需要将 main 方法的信息添加到 manifest 文件中,使用 maven-shade-plugin ,修改 POM 文件
注意 plugin 元素位于 <project> <build> <plugins> 下面
so 这次打出的 jar 可以单独运行了
最后, mvn clean install 可以将 jar 安装到本地的maven仓库中
至此,整个maven过程结束!!
总结:
今天主要从 0 开始练习了下 maven 的使用:
1. 创建pom.xml 文件
2. 项目的坐标元素 groupId artifactId version
3. 编译 mvn clean compile
4. 单元测试 mvn clean test
5. 打包 mvn clean package
6. main 方法执行
7. 安装到本次maven仓库 mvn clean install
明日计划:
继续学习 maven
DONE !!!
评论