Maven这个单词来自于意第绪语(犹太语),意为知识的积累.
Maven是一个基于项目对象模型(POM) 的概念的纯java开发的开源的项目管理工具。主要用来管理java项目,进行依赖管理(jar包依赖管理)和项目构建(项目编译、打包、测试、部署)。此外还能分模块开发,提高开发效率。
maven的conf目录中有settings.xml ,是maven的配置文件, 做如下配置:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <!-- localRepository | The path to the local repository maven will use to store artifacts. | | Default: ${user.home}/.m2/repository <localRepository>/path/to/local/repo</localRepository> --> <!--选择一个磁盘目录,作为本地仓库,本地存储jar包的目录--> <localRepository>D:\Maven\myrepository</localRepository>在标签中增加一个标签,限定maven项目默认的jdk版本,内容如下:
<profiles> <profile> <id>myjdk</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile> </profiles> <!-- 让增加的profile生效--> <activeProfiles> <activeProfile>myjdk</activeProfile> </activeProfiles>除中央仓库之外,还有其他远程仓库。
比如aliyun仓库( http://mavevn.aliyun.com/nexus/content/groups/public/)
中央仓库在国外, 下载依赖速度过慢,所以都会配置一个国内的公共仓库替代中央仓库。
<!--setting.xm1中添加如下配置--> <mirrors> <mirror> <id>aliyun</id> <!--中央仓库的 mirror(镜像) --> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <!-- aliyun仓库地址 以后所有要指向中心仓库的请求,都会指向aliyun仓库--> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> </mirrors>新建项目,要选择Maven选项
src/main/java存放源代码,建包,放项目中代码(service,dao,User,…)
src/main/resources书写配置文件,项目中的配置文件(jdbc.properties)
src/test/java 书写测试代码,项目中测试案例代码
src/test/resources 书写测试案例相关配置文件
目根/pom.xml (project object model) maven项目核心文件, 其中定义项目构建方式,声明依赖等
注意:项目中的建包,建类,执行,都和普通项目无差异
根据项目类型,在pom.xml中做出对应配置,添加配置: war/jar
<?xml version="1.0" encoding="UTF-8"?> <!-- POM Project Onject Model--> <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.wlw</groupId> <artifactId>maven_test01</artifactId> <version>1.0-SNAPSHOT</version> <!--设置项目类型 打包方式,java项目用jar,web项目用war --> <packaging>jar</packaging> <!-- 定义项目中所需要的依赖--> <dependencies> <!--依赖--> </dependencies> </project>在项目的pom文件中,增加依赖
pom.xml中设置war:war
导入 JSP 和 Servlet 和 JSTL 依赖,使项目具有web编译环境
<?xml version="1.0" encoding="UTF-8"?> <!-- POM Project Onject Model--> <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.wlw</groupId> <artifactId>maven_test01</artifactId> <version>1.0-SNAPSHOT</version> <!--设置项目类型 打包方式,java项目用jar,web项目用war --> <packaging>war</packaging> <!-- 定义项目中所需要的依赖--> <!-- 导入 JSP 和 Servlet 和 JSTL 依赖,使项目具有web编译环境 --> <dependencies> <!-- jstl --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!-- jsp-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> </dependencies> </project>
项目中导入的依赖可以做生命周期的管理
<?xml version="1.0" encoding="UTF-8"?> <!-- POM Project Onject Model--> <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.wlw</groupId> <artifactId>maven_test01</artifactId> <version>1.0-SNAPSHOT</version> <!--设置项目类型 打包方式,java项目用jar,web项目用war --> <packaging>war</packaging> <!-- 定义项目中所需要的依赖--> <!-- 导入 JSP 和 Servlet 和 JSTL 依赖,使项目具有web编译环境 --> <dependencies> <!-- jstl --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <!-- 声明周期,就是表明哪些过程可用--> <scope>provided</scope> </dependency> <!-- jsp-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> <!--声明周期为test,表明只在测试时使用 --> </dependency> </dependencies> </project>通过Idea打开cmd,然后执行Maven指令
下载nexus-2.x-bundle.zip,解压即可
访问私服: http://localhost:8081/nexus/
而此时就有问题,私服中有很多仓库,每个仓库都有自己的url,则项目中配置哪个仓库呢? 私服中有一个仓库组,组中包含多个仓库,可以指定仓库组的url,即可从多个仓库中获取构件
配置settings.xml,设置私服地址、认证等信息
<servers> <!--保存登录私服的用户名与密码--> <server> <id>nexus-shine</id> <!-- 私服的认证 nexus的认证id ---> <username> admin</username> <!--nexus中的用户名密码--> <password> admin123</password> </server> </servers> <profiles> <!--私服的配置--> <profile> <id>nexus</id> <repositories> <repository> <id>nexus-shine</id> <!--nexus认证id [此处的repository的id要和 <server>的id保持一致] --> <!--name随便--> <name>Nexus Release Snapshot Repository< /name> <!--地址是nexus中仓库组对应的地址--> <url>http://localhost:8081/nexus/content/groups/public/</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> <pluginRepositories> <!-- 插件仓库地址,各节点的含义和上面是一样的--> <p1uginRepository> <id>nexus-shine</id> <!--nexus认证id [此处的repository的id要和 <server>的1d保持- -致] --> <!--地址是nexus中仓库组对应的地址--> <url>http://localhost:8081/nexus/content/groups/public/</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <activeProfile>myjdk</activeProfile> <!--使私服配置生效--> <activeProfile>nexus</activeProfile> </activeProfiles> 至此,Maven项目中需要依赖时,Maven会从私服中下载上面就是配置私服的过程将自己写的项目打包放到私服仓库中
执行: mvn deploy 即可将 项目 部署 到 私服对应的仓库中,此时项目中的打包方式多为jar
但需要提前在项目的pom.xml中配置部署私服仓库位置,如下:
<!-- 定义项目中需要的所有依赖 --> <dependencies> ... </dependencies> <!-- 在项目的pom.xml中 配置私服的仓库地址,可以将项目打jar包部署到私服 --> <distributionManagement> <repository> <id>nexus-shine</id> <!-- nexus认证id --> <!--下面的url是私服中代表本地仓库的地址,releases存放的是稳定项目的jar包--> <url>http://localhost:8081/nexus/content/repositories/releases</url> </repository> <snapshotRepository> <id>nexus-shine</id> <!-- nexus认证id --> <!--下面的url是私服中代表本地仓库的地址,snapshots存放的是正在开发中项目的jar包--> <url>http://localhost:8081/nexus/content/repositories/snapshots</url> </snapshotRepository> </distributionManagement>注意:如上的repository的id依然是要和settings.xml中配置的server中的id一致,才能通过私服的认证