maven 创建工程命令
mvn archetype:generate -DgroupId=com.zhss.maven -DartifactId=maven-first-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
分解一下
- mvn archetype:generate :archetype 是一个maven 插件,本意是原型,这里可以理解为模板,整体就是基于模板来生成项目。
- -DgroupId=com.zhss.maven :-D 的意思如下,这里就是设置 groupId 这个属性值为 com.zhss.maven
- -DartifactId=maven-first-app :同上
- -DarchetypeArtifactId=maven-archetype-quickstart :同上
- -DinteractiveMode=false:表示maven是否需要和用户交互以获得输入
-D & -P
-D:用来设置一些属性值
比如 pom 文件如下
<properties>
<theme>myDefaultTheme</theme>
</properties>
mvn -Dtheme=halloween clean package 就会覆盖 theme 原先 myDefaultTheme 值,变成 halloween。
-P:Profiles配置文件
<profile>
<id>test</id>
<activation>
<property>
<name>env</name>
<value>test</value>
</property>
</activation>
...
</profile>
执行 mvn test -Penv=test 执行 test 的配置文件
maven的约定
- src/main/java 目录里存放的是 java 源码
- src/test/java 目录里包含了测试代码
-
pom 文件是maven核心配置文件,是这个项目的 ProjectObjectModel。
image.png
打包
运行 mvn clean package 命令
image.png
如上,可以看到 maven 为我们做了这些操作:
- 从 aliyun 的仓库下载了 junit 的jar包和pom文件
- 执行了一些插件的操作
- clean:Deleting /Users/ethan/code/java/ruyuan/maven-first-app/target。删除target目录
- resources:skip non existing resourceDirectory /Users/ethan/code/java/ruyuan/maven-first-app/src/main/resources。没有资源文件,就没有执行
- compile:Compiling 1 source file to /Users/ethan/code/java/ruyuan/maven-first-app/target/classes:将 java 文件编译成 class 文件。
- testResources:skip non existing resourceDirectory /Users/ethan/code/java/ruyuan/maven-first-app/src/test/resources。没有资源文件,就没有执行
- testCompile:Compiling 1 source file to /Users/ethan/code/java/ruyuan/maven-first-app/target/test-classes。将 test 中的 java 文件编译成 class 文件。
- test:跑单元测试
- jar:/Users/ethan/code/java/ruyuan/maven-first-app/target/maven-first-app-1.0-SNAPSHOT.jar。打成 jar 包。
注意一下:compile 的步骤中都有一条意思是 “Changes detected - recompiling the module!”。意思就是检测到文件变更,需要重新编译这个模块。也就是说如果文件没有变更,就不会重复编译。
运行 jar 包
java -cp target/maven-first-app-1.0-SNAPSHOT.jar com.zhss.maven.App
-cp 是 classpath 的意思,意思从这个 jar 包里找到 class 文件
网友评论