Maven:是Apache提供的免费开源的项目管理工具。它提供了一个项目对象模型(pom.xml)、一个依赖管理系统(根据坐标,帮我们引入依赖)、一套项目生命周期(帮我们方便的进行项目构建)、一组标准集合(Maven工程的目录结构规范,坐标规范)、和一个插件管理系统(提供了进行项目构建的命令)。
c3p0
, com.jd
c3p0
0.9.1.2
, 1.0-SNAPSHOT
, 5.2.0-RELEASE
C:\Users\电脑的用户名\.m2\repository
maven
|--bin Maven的可执行命令文件夹
|--boot Maven的引导程序(类加载器)
|--conf 配置文件夹
|--lib Maven的核心程序代码
Maven是免安装的,直接解压
注意检查JDK环境变量是否正确
配置Maven环境变量:
验证Maven配置
mvn -version
配置步骤:
扩展:
里边增加:<profile>
<id>jdk-1.8id>
<activation>
<activeByDefault>trueactiveByDefault>
<jdk>1.8jdk>
activation>
<properties>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
<maven.compiler.compilerVersion>1.8maven.compiler.compilerVersion>
properties>
profile>
MAVEN_HOME
, 值就是maven软件的解压目录Path
,值里新增%MAVEN_HOME%\bin
conf\settings.xml
,增加本地仓库的配置:
标签一个项目要想使用Maven进行管理,那么这个项目的目录结构就必须要符合Maven的要求:
maven项目
|--pom.xml 项目对象模型文件,一个Maven项目必定有pom.xml文件
|--src
|--main 项目的主体程序代码目录
| |--java 项目的Java程序代码放在这文件夹里
| |--resources 项目的配置文件放在这里
| |--webapp 项目的web资源放在这里,html,css,js,jsp,音频,图片,视频等等
| |--WEB-INF
| |--其它web资源
|--test 项目的单元测试代码目录
|--java 项目的单元测试代码
|--resources 项目单元测试需要的配置文件
src\main\java
:放主体程序代码的java文件src\main\resources
:放主体程序代码的配置文件src\main\webapp
:放主体程序代码的web资源:html、css、js、jsp等等clean: clean
compile: compile
test: compile=>test
package: compile=>test=>package
install: compile=>test=>package=>install
人的生命周期:婴儿=>儿童=>少年=>青年=>中年=>老年
clean
compile->test->package->install->deploy
site
。生成Maven项目的描述信息文档mvn clean
:清理。删除掉target目录mvn compile
:编译。把主体程序代码进行编译,放到target目录里mvn test
:测试。编译并执行单元测试代码mvn package
:打包。Java项目打成jar包,web项目打包war包mvn install
:安装。把程序包安装到本地仓库,安装位置是坐标对应的文件夹clean
compile=>test=>package=>install=>deploy
site
-DarchetypeCatalog=internal
org.apache.maven.archetypes:maven-archetype-quickstart
再继续步骤,跟以前的一样:设置module的名称和位置
注意:不要和已有的其它module重名或者重位置
创建后,如果弹窗Maven projects need to be imported
,就选择 启动自动导入。
作用是:如果pom.xml文件有变更,Maven会自动读取,立即生效;否则就要手动导入
如果项目中需要使用jar包,只需要把jar包的坐标配置到项目的pom.xml中即可。在pom.xml的
标签里增加以下内容:
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<scope>依赖范围scope>
dependency>
可以在pom.xml里,输入
dep
,会自动补充坐标模板,我们填充坐标值即可可以使用
alt+insert
,会弹出依赖导入的界面,可以从本地仓库里搜索依赖如果不知道依赖的坐标,可以从中央仓库搜索坐标:https://mvnrepository.com/
如果项目中引入的jar包过多,可能会出现jar包冲突,我们可能设置jar包不同的依赖范围来处理jar包冲突。
compile
:默认的依赖范围,全范围有效。test
:单元测试有效。src/test里有效,src/main里无效provided
:编译时有效,运行时使用其它地方提供的jar包。runtime
:运行时有效,编译时无效。比如:数据库驱动包system
:引入仓库之外的本地jar包。少用Junit
:依赖范围通常设置为test
servlet-api, jsp-api
:依赖范围通常设置为provided
数据库驱动包
:依赖范围可以是默认的,也可以是runtime
compile
compile
:默认的。编译时有效,运行时有效,单元测试有效test
:单元测试有效(src\main\test)里有效
provided
:编译时有效,运行时无效(备胎包)
runtime
:编译时无效,运行时有效
system
:引用仓库之外的本地jar包,少用plugins
标签中,通过plugin
标签引入maven的功能插件。
标签,放在pom.xml的
标签内部
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.2version>
<configuration>
<source>1.8source>
<target>1.8target>
<encoding>utf-8encoding>
configuration>
plugin>
plugins>
标签,放在pom.xml的
标签内部<plugins>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<configuration>
<port>82port>
<path>/path>
configuration>
plugin>
plugins>
nexus-2.12.0-01-bundle.zip
。注意:解压路径里不要有中文、空格、特殊字符nexus.bat install
net start nexus
(第一次启动比较慢)
net stop nexus
http://localhost:8081/nexus
conf/nexus.properties
文件,修改端口号,重启nexus服务后生效hosted
:宿主仓库, 部署自己的 jar 到这个类型的仓库,包括 releases 和 snapshot 两部proxy
:代理仓库, 用于代理远程的公共仓库,如 maven 中央仓库,用户连接私服,私group
:仓库组,用来合并多个 hosted/proxy 仓库,通常我们配置自己的 maven 连接仓virtual
:虚拟仓库,兼容 Maven1 版本的 jar 或者插件conf/settings.xml
:
servers
标签里,配置私服的帐号和密码<server>
<id>releasesid>
<username>adminusername>
<password>admin123password>
server>
<server>
<id>snapshotsid>
<username>adminusername>
<password>admin123password>
server>
<distributionManagement>
<repository>
<id>releasesid>
<url>http://localhost:8081/nexus/content/repositories/releases/url>
repository>
<snapshotRepository>
<id>snapshotsid>
<url>http://localhost:8081/nexus/content/repositories/snapshots/url>
snapshotRepository>
distributionManagement>
deploy
命令:
xx-snapshot
,项目将发布到 nexus 的 snapshot仓库xx-release
,项目将发布到 nexus的 release 仓库settings.xml
的profiles
标签下配置:
settings.xml
中没有repositories
标签,所以要使用profile
标签来配置仓库<profile>
<id>devid>
<repositories>
<repository>
<id>nexusid>
<url>http://localhost:8081/nexus/content/groups/public/url>
<releases>
<enabled>trueenabled>
releases>
<snapshots>
<enabled>trueenabled>
snapshots>
repository>
repositories>
<pluginRepositories>
<pluginRepository>
<id>publicid>
<name>Public Repositoriesname>
<url>http://localhost:8081/nexus/content/groups/public/url>
pluginRepository>
pluginRepositories>
profile>
profile
定义的仓库
<activeProfiles>
<activeProfile>devactiveProfile>
activeProfiles>
testdownload
,配置依赖<dependency>
<groupId>com.baidugroupId>
<artifactId>commons-utilsartifactId>
<version>1.0-SNAPSHOTversion>
dependency>
settings.xml
里,配置仓库的帐号和密码pom.xml
里,配置仓库的地址mvn deploy
settings.xml
里配置仓库地址settings.xml
里激活仓库的配置cmd
命令示例:mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dfile=fastjson-1.1.37.jar -Dpackaging=jar
settings.xml
中配置私服的server信息<server>
<id>thirdpartyid>
<username>adminusername>
<password>admin123password>
server>
mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=fastjson-1.1.37.jar -Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty
DgroupId
和DartifactId
构成了 jar 包的坐标,项目就是依靠这两个属性定位。可以自己起名Dfile
表示需要上传的 jar 包的位置。Durl
私服上仓库的位置,打开 nexus——>repositories 菜单,可以看到该路径。DrepositoryId
服务器的表示 id,在 nexus 的 configuration 可以看到。Dversion
表示版本信息。 上传成功后,在 nexus 界面点击 3rd party 仓库可以看到这包。
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>1.18.8version>
<scope>providedscope>
dependency>
安装插件
解决编译时出错问题
编译时出错,可能是没有enable注解处理器。Annotation Processors > Enable annotation processing。设置完成之后程序正常运行。
@Data
@Getter/@Setter
@ToString
@NoArgsConstructor
, @AllArgsConstructor
@Data
@Data
public class User implements Serializable{
private Integer id;
private String username;
private String password;
private String address;
private String nickname;
private String gender;
private String email;
private String status;
}
@Getter/@Setter
public class User implements Serializable{
@Setter
@Getter
private Integer id;
private String username;
private String password;
private String address;
private String nickname;
private String gender;
private String email;
private String status;
}
@ToString
toString()
方法toString
方法会输出类名、所有属性(会按照属性定义顺序),用逗号来分割。exclude
属性指定忽略字段不输出,@ToString(exclude = {"id"})
public class User implements Serializable{
private Integer id;
private String username;
private String password;
private String address;
private String nickname;
private String gender;
private String email;
private String status;
}
@xxxConstructor
@NoArgsConstructor
: 无参构造器@NoArgsConstructor
public class User implements Serializable{
private Integer id;
private String username;
private String password;
private String address;
private String nickname;
private String gender;
private String email;
private String status;
}
@AllArgsConstructor
: 全参构造器@AllArgsConstructor
public class User implements Serializable{
private Integer id;
private String username;
private String password;
private String address;
private String nickname;
private String gender;
private String email;
private String status;
}
*.lastUpdated
文件,是下载依赖出错后遗留的不完整数据
标签中添加如下内容:<mirror>
<id>alimavenid>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<mirrorOf>centralmirrorOf>
mirror>
.lastUpdated
结尾的文件,是下载依赖失败后遗留的文件,需要清除掉*.lastUpdated
pom.xml
中,删除原有的所有依赖