项目构建

  • 构建

Maven的安装

  1. 确认已安装JDK,并已配置环境变量JAVA_HOME。
  2. 下载maven项目压缩包:Maven – Download Apache Maven 并解压,解压后路径如D:\\develop\\apache-maven-3.0.4
  3. 添加环境变量M2_HOME如M2_HOME=D:\\develop\\apache-maven-3.0.4。
  4. 在环境变量PATH中添加maven的bin目录(Windows下为%M2_HOME%\\bin,Linux下为$M2_HOME/bin)
  5. 可选环境变量MAVEN_OPTS用来指定Maven使用JDK时的JVM属性。如指定其值为“-Xms256m -Xmx512m”,增加大小可防止内存溢出。
  6. 验证安装:mvn -v或mvn --version

基础概念

Project工程

POMpom.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私有仓库。

配置文件settings.xml

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://mvnrepository.com

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 | Releases

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 某包:某类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值