超级pam的位置:
maven-model-builder-3.3.9.jar/org/apache/maven/model/pom-4.0.0.xml
setting.xml的加载顺序:
在我看来你的大脑应该是一个搜索引擎,不应该是一个内存,不应该是一个磁盘,你要知道,来什么我去哪找,找什么,但是该背的也要背。
pom.xml
groupId com.gupaoedu
artfactId 功能命名
version 版本号
packaging 打包方式 默认是jar
dependencyManagement
1. 只能出现在父pom
2. 统一版本号
3. 声明 (子POM里用到再引)
Dependency
1. Type 默认jar
2. scope(如果你是一个追求极致的人,可以用scope这个概念去优化你的pom文件)
a) compile 编译(默认是compile) 例如spring-core
b) test 测试
c) provided 运行时不需要的jar包 例如 servlet
d) runtime 只有在运行时才需要用到 例如JDBC驱动实现(JDBC只定义接口,具体接口的实现由数据库厂商来完成,在编译的时候,只需要用接口就行了,不关心有没有对应的实现类。)
e) system 本地一些jar 例如短信jar
f) 依赖传递
g) 依赖仲裁
i. 最短路径原则
ii. 加载先后原则(下面的会覆盖掉上面的)
h) exclusions
i. 排除包
怎么看依赖树
首先配置maven环境变量
mvn dependency:tree > d.txt
所以啊,做程序员,为什么别人的效率高,别人一行命令解决啦,你还加班,你加班是应该的,不觉得么。
如何一行命令改父pom的版本号
首先使用下面的插件
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.3</version>
</plugin>
这行命令是:
mvn version:set -DnewVersion=1.1-SNAPSHOT
生命周期 lifecycle/phase/goal
A Build Lifecycle is Made Up of Phases
A Build Phase is Made Up of Plugin Goals
版本管理
a) 1.0-SNAPSHOT
i. repository 删除
ii. mvn clean package -U (强制拉一次)
b) 主版本号.次版本号.增量版本号-<里程碑版本>
1.0.0-RELAESE
常用命令
a) compile
b) clean 删除 target/
命令:mvn clean
c) test test case junit/testNG
命令:mvn
d) package 打包
e) install 把项目install到local repo
f) deploy 发本地jar发布到remote
Build Order的执行顺序由两部分决定:module的顺序和依赖关系。
插件
a) 常用插件
i. https://maven.apache.org/plugins/
ii. http://www.mojohaus.org/plugins.html
iii.findbugs 静态代码检查
命令:
mvn findbugs:findbugs
iv. versions 统一升级版本号
1. mvn versions:set -DnewVersion=1.1
v. source 打包源代码
vi. assembly 打包zip、war
vii.tomcat7
自定义maven插件
自定义maven插件的参考文档: https://maven.apache.org/guides/plugin/guide-java-plugin-development.html
a) maven-plugin
b) extends AbstractMojo
c)
package com.gupao;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import java.util.List;
@Mojo(name = "gupaoedu", defaultPhase = LifecyclePhase.PACKAGE)
public class GupaoMojo extends AbstractMojo {
@Parameter
private String msg;
@Parameter
private List<String> options;
@Parameter(property = "args")
private String args;
public void execute() throws MojoExecutionException, MojoFailureException {
System.out.println("gupaoedu plugin !!!" + msg);
System.out.println("gupaoedu plugin !!!" + options);
System.out.println("gupaoedu plugin !!!" + args);
}
}
d) mvn install
e) 参数传递
Profile
a) 使用场景 dev/test/pro
b) setting.xml 家和公司两套
仓库
a) 下载
b) 安装 解压
c) 使用http://books.sonatype.com/nexus-book/reference3/index.html
i. http://192.168.1.6:8081/nexus
ii. admin/admin123
d) 发布
发布的时候,项目中pom文件的配置
发布的时候,本地中setting.xml的配置
e) 下载jar配置
i. 配置mirror
ii. Profile
archetype 模版化
a) 生成一个archetype
在项目的根目录下,执行下面的命令
i. mvn archetype:create-from-project
ii. cd /target/generated-sources/archetype
iii. mvn install
b) 从archetype创建项目 (命令行新建)
mvn archetype:generate -DarchetypeCatalog=local