- 构建
Maven的安装
- 确认已安装JDK,并已配置环境变量JAVA_HOME。
- 下载maven项目压缩包:Maven – Download Apache Maven 并解压,解压后路径如D:\\develop\\apache-maven-3.0.4
- 添加环境变量M2_HOME如M2_HOME=D:\\develop\\apache-maven-3.0.4。
- 在环境变量PATH中添加maven的bin目录(Windows下为%M2_HOME%\\bin,Linux下为$M2_HOME/bin)
- 可选环境变量MAVEN_OPTS用来指定Maven使用JDK时的JVM属性。如指定其值为“-Xms256m -Xmx512m”,增加大小可防止内存溢出。
- 验证安装:mvn -v或mvn --version
基础概念
Project:工程
POM:pom.xml
GroupId:工程的唯一标识符(工程名)
Artifact:构件,工程将要产生或需要使用的文件,可以是jar文件、源文件、二进制文件、war文件、pom文件。每个Artifact都由GroupId和ArtifactId组合的标识符唯一识别,需要被使用的Artifact都要放在仓库(Repository)中。
Dependency:依赖包。Dependency一般是其他工程的Artifact。
Plug-in:插件。
Repository:仓库。即放置Artifact的地方。有中央仓库、公共仓库、私有仓库及本地仓库之分。可用Nexus(http://www.sonatype.org/nexus)创建Maven私有仓库。
maven的系统级别配置文件位于%Maven_Home%\conf\settings.xml
maven的用户级别配置文件位于%User_Home%\.m2\settings.xml,默认不存在,用户可自行添加。
当这两个文件同时存在的时候,对于相同的配置项,用户级别的定义会覆盖系统级别的定义。
自定义用户配置文件示例:
<?xml version="1.0" encoding="UTF-8"?> <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"> <pluginGroups> </pluginGroups> <proxies> </proxies> <servers> </servers> <mirrors> <!-- 阿里云 Maven 镜像服务器配置 --> <mirror> <id>aliyun</id> <name>aliyun Maven</name> <mirrorOf>*</mirrorOf> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </mirror> </mirrors> <profiles> <profile> <!-- JDK 编译版本配置 --> <id>jdk-1.8</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> <activeProfiles> </activeProfiles> </settings> |
自定义用户配置文件模板:
<?xml version="1.0" encoding="UTF-8"?> <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"> <!-- 设置本地仓库路径,默认为${user.home}/.m2/repository <localRepository>C:\\Users\\TWX\\.m2\\repository</localRepository> --> <!-- 是否使用交互模式,默认为true;如果设为false,那么当Maven需要用户进行输入的时候,它会使用一个默认值。 <interactiveMode>true</interactiveMode> --> <!-- 是否禁止Maven在项目编译和部署等操作时进行联网来下载所需要的信息,默认为false。 <offline>false</offline> --> <!-- 表示当通过plugin的前缀来解析plugin的时候到哪里寻找。 在pluginGroups元素下面可以定义一系列的pluginGroup元素,pluginGroup元素指定的是plugin的groupId。 默认情况下,Maven会自动把org.apache.maven.plugins和org.codehaus.mojo添加到pluginGroups下。 --> <pluginGroups> <!--<pluginGroup>com.your.plugins</pluginGroup>--> </pluginGroups> <!-- 设置Maven在进行联网时需要使用到的代理。proxies下面可以定义一系列的proxy子元素。 当设置了多个代理的时候第一个标记active为true的代理将会被使用。 --> <proxies> <!-- <proxy> <id>optional</id> <active>true</active> <protocol>http</protocol> <username>proxyuser</username> <password>proxypass</password> <host>proxy.host.net</host> <port>80</port> <nonProxyHosts>local.net|some.host.com</nonProxyHosts> </proxy> --> </proxies> <!-- 设置当需要连接到一个远程服务器的时候需要使用到的验证方式。servers下面可以定义一系列的server子元素。 验证方式这主要有username/password和privateKey/passphrase这两种方式。 --> <servers> <!-- 使用密码的验证方式 <server> <id>deploymentRepo</id> <username>repouser</username> <password>repopwd</password> </server> --> <!-- 使用密钥的验证方式 <server> <id>siteServer</id> <privateKey>/path/to/private/key</privateKey> <passphrase>optional; leave empty if not used.</passphrase> </server> --> </servers> <!-- 定义一系列的远程仓库的镜像。 mirrorOf:表示该mirror关联哪个仓库,其值为其关联仓库的id。 当要同时关联多个仓库时,这多个仓库之间可以用逗号隔开; 当要关联所有的仓库时,可以使用“*”表示; 当要关联除某一个仓库以外的其他所有仓库时,可以表示为“*,!repositoryId”; 当要关联不是localhost或用file请求的仓库时,可以表示为“external:*”。 --> <mirrors> <!-- 配置阿里云Maven镜像服务器 --> <mirror> <id>aliyun</id><!-- 自定义id,多个mirror的id不能相同 --> <name>aliyun Maven</name><!-- 自定义名称 --> <mirrorOf>*</mirrorOf><!-- 多个mirror的mirrorOf不能相同,即每个远程仓库都只能有一个mirror与它关联 --> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </mirror> </mirrors> <!-- profiles用于指定一系列的profile。 profile元素由activation、repositories、pluginRepositories和properties四个元素组成。 当settings.xml中定义了一个与pom.xml中有相同id的profile且为激活状态时,该profile会覆盖pom.xml中的profile。 --> <profiles> <!-- 配置默认JDK版本 --> <profile> <id>jdk-1.8</id> <!-- 指定激活条件,需全部条件符合才激活 --> <activation> <!-- 为true表示若无其他激活的profile时,激活此profile --> <activeByDefault>true</activeByDefault> <!-- 版本条件还可指定范围,如[1.4,1.7)表示1.4、1.5和1.6满足,[1.4,1.7]表示1.4、1.5、1.6和1.7满足 --> <jdk>1.8</jdk> <!-- 其他激活条件的例子 <os> <name>Windows 7</name> <family>Windows</family> <arch>x86</arch> <version>5.1.2600</version> </os> 定义了下面的property激活条件后,可在调用Maven指令时加上参数hello并指定其值为world来激活该profile 例如:mvn compile –Dhello=world <property>当Maven检测到了下面键时就激活该profile <name>hello</name> </property> <property>当Maven检测到了下面键值对时就激活该profile <name>hello</name> <value>world</value> </property> <file> <exists>${basedir}/file2.properties</exists> <missing>${basedir}/file1.properties</missing> </file> --> </activation> <!-- 定义属性键值对。当该profile是激活状态的时候,properties下面指定的属性都可以在pom.xml中使用。--> <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是激活状态的时候,这里面定义的远程仓库将作为当前pom的远程仓库 <repositories> <repository> <id>codehausSnapshots</id> <name>Codehaus Snapshots</name> 对于工件的类型的限制 <releases> <enabled>false</enabled>表示这个仓库是否允许这种类型的工件 <updatePolicy>always</updatePolicy> <checksumPolicy>warn</checksumPolicy> </releases> 对于工件的类型的限制 <snapshots> <enabled>true</enabled> 表示多久尝试更新一次。可选值有always、daily、interval:minutes(表示每多久更新一次)和never <updatePolicy>never</updatePolicy> 当Maven在部署项目到仓库的时候会连同校验文件一起提交, checksumPolicy表示当这个校验文件缺失或不正确的时候该如何处理,可选项有ignore、fail和warn。 <checksumPolicy>fail</checksumPolicy> </snapshots> <url>http://snapshots.maven.codehaus.org/maven2</url> <layout>default</layout> </repository> </repositories> --> <!-- 在Maven中有两种类型的仓库,一种是存储工件的仓库,另一种就是存储plugin插件的仓库。 pluginRepositories的定义和repositories的定义类似,它表示Maven在哪些地方可以找到所需要的插件。 <pluginRepositories> </pluginRepositories> --> </profile> </profiles> <!-- 包含一系列的activeProfile元素,表示对于所有的pom都处于活跃状态的profile --> <activeProfiles> <!-- <activeProfile>alwaysActiveProfile</activeProfile> <activeProfile>anotherAlwaysActiveProfile</activeProfile> --> </activeProfiles> </settings> |
Maven坐标
<dependencies>
<!-- spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.2.8.RELEASE</version>
</dependency>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
Maven搜索pom配置的网站
http://search.maven.org/#search
http://maven.aliyun.com/nexus/#welcome
创建Maven项目
使用Maven命令创建
例:
mvn archetype:generate -DgroupId=org.sang -DartifactId=chapter01 -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
命令解释:
-DgroupId 组织ID
-DartifactId 项目名称或模块名称
-DarchetypeArtifactId 项目骨架
-DinteractiveMode 是否使用交互模式
使用Eclipse创建
File-》New-》Maven Project-》...
使用IntelliJ IDEA创建
New Project-》Maven-》...
下载地址
Gradle添加阿里云镜像
对单个项目生效,在项目中的build.gradle中添加内容(一定要放在mavenCentral()的上方):
repositories { mavenLocal() maven {url 'http://maven.aliyun.com/nexus/content/groups/public/'} mavenCentral() } |
对所有项目生效,在USER_HOME/.gradle/下创建init.gradle文件:
allprojects{ repositories { def ALIYUN_REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public' def ALIYUN_JCENTER_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter' all { ArtifactRepository repo -> if(repo instanceof MavenArtifactRepository){ def url = repo.url.toString() if (url.startsWith('https://repo1.maven.org/maven2')) { project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL." remove repo } if (url.startsWith('https://jcenter.bintray.com/')) { project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL." remove repo } } } maven { url ALIYUN_REPOSITORY_URL url ALIYUN_JCENTER_URL } } } |
常用命令
编译所有 java 文件 | gradlew compileJava |
编译并执行 java 文件 | gradlew run |
执行所有的单元测试 | gradlew test |
编译并运行某包某类 | gradlew 某包:某类 |