Apache-Maven进阶一

本文详细介绍Maven的基础概念及其在软件开发中的应用。涵盖Maven的安装配置、工程管理、依赖管理、构建过程等方面,并演示如何创建首个Maven工程、编译源文件、打包程序等实用操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是Maven

Maven本质上是一个工程管理和理解工具。

提供了一种方式,帮助管理:

Builds

Documentation

Reporting

Dependencies

SCMs

Releases

Distribution

二、Maven对我们的开发进度有什么益处?

采用标准的规定和惯例加速开发周期

同时达到更高的成功率

三、如何设置Maven

Maven默认设置可以满足大多数情况,如果你想改变,cache位置、Http代理,需要改变配置。

Maven的配置三个级别:

1Project:大多数静态设置在pom.xml文件中。

2Installation:在安装时,加入的配置。

3User:对特殊用户的配置。

很显示,Project定义的信息,不管谁建造他,都将被应用到工程。别的两项定义针对当前环境。

注:InstallationUser定义的信息,通常不能加入共享工程信息。例如,<organization><distributionManagement>

对于上面注中提到的情况,需要写一个父pom.xml用于让其它工程继承。

1.配置本地资源库

可以修改${user.home}\..m2\settings.xml。该文件不是必需,如没有,系统将使用默认文件(${M2_HOME}\conf\settings.xml)

打开settings.xml,找到localRepository,默认值为${user.home}\.m2\repository。将默认值改为本地路径。如,d:\repository

注:该路径必须是本地路径。

2.配置代理

代理也可以在配置文件中指定。

代理作用:供访问Maven 2.0Http请求使用。

代理设置如果需要验证,需要提供用户名和密码。

setting.xml配置文件:

<proxies>

<proxy>

<id>optional</id>

<active>true</active>

<protocol>http</protocol>

<host>proxy.somewhere.com</host>

<port>8080</port>

<username>liuyf</username>

<password>123456</password>

<noProxyHosts>www.google.com|*.somewhere.com</noProxyHosts>

</proxy>

</proxies>

注:noProxyHosts支持通配符。不代理的主机列表。

3.配置并行工程

Maven 2.1.0默认一次下载5个工程(不同组)。

启动Maven时,可以通过-Dmaven.artifact.threads来设定。

mvn –Dmaven.artifact.threads=1 clean install

如果设定固定值,可以通过设置MAVEN_OPTS环境变量,来指定。例如,Unix下,根据需要改为Windows

export Maven_OPTS=-Dmaven.artifact.threads=10

4.安全和发布设置

发布工程到指定的资源库,是在工程的pom.xml文件中通过<distributionManagement>来设定的。但是你不可以将用户名,密码,和一些安全设置放到这个配置文件中。因此,你应该加入一个server定义,工程通过id来配置对应的server

<servers>

<server>

<id>lyf</id>

<username>liuyf8688</username>

<password>123456</password>

<privateKey>默认值~/.ssh/id_dsa</privateKey>

<passPhrase>my_key_phrase</passPhrase>

</server>

</servers>

5.使用资源库镜像

资源库可以被声明在一个工程中,那意味着如果你拥有本地的资源库,共享的工程非常容易从资源库外面得到适当的设置。

使用镜像的原因:

1)在internet网上同步镜像,地理位置近,访问速度快。

2)可能想用本地的易控的资源库来替换一个特定的资源库。

3)可能想用maven-proxy提供到镜像的本地缓存,需要替换他的URL

<mirrors>

<mirror>

<id>liuyf8688</id>

<name>liuyf8688</name>

<url>http://www.liuyf8688.com</url>

<mirrorOf>central</mirrorOf>

</mirror>

</mirros>

6.profiles

资源库配置也可以放到profile。可以拥有多个profile文件,根据环境设置一个生效。

四、如何开始我的第一个Maven工程?

使用Maven的原型(archetype)机制。一个archetype定义了针对某一些任务定义了模板。

执行以下命令,创建工程:

mvn archetype:create –DarchetypeGroupId=org.apache.maven.archetypes

–DgroupId=com.liuyf8688 –DartifactId=liuyf-app

命令成功执行后,将建立liuyf-app工程文件夹。进入文件夹,包括srcpom.xml

1.pom.xml分析

包含工程的工程对象模型。POMMaven的基本工作单元。

pom.xml片断:

<project>

<modelVersion>4.0.0</modelVersion>

<groupId>com.liuyf8688</groupId>

<artifactId>liuyf-app</artifactId>

<packaging>jar</packaging>

<version>1.0-SNAPSHOT</version>

<name>liuyf-app</name>

<url>http://maven.apache.org</url>

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>3.8.1</artifactId>

<scope>test</scope>

</dependency>

</dependencies>

</project>

分析:

1projectpom.xml文件的根元素。

2modelVersion:这个文件使用的Object Model的版本。

3groupId:创建这个工程的组和组织的唯一标识。

4artifactId:被这个工程创建的产品的唯一名称。工程的产品典型的是一

jar文件。源文件打包文件也用这个名称作为他的名称的一部分。

5packaging:指示这个产品的使用的打包类型。如,jarwarear

6version:指示这个产品的版本。

7name:工程显示的名称,默认artifactId相同。maven来产生。

8url:指示了工程的站点,默认http://maven.apache.orgmaven来产生。

9description:提供了工程的基本描述。

五、如何编译工程源文件?

进入刚才创建的工程根目录。执行如下命令:

mvn compile

六、如何编译测试程序及运行单元测试程序?

编译并运行测试程序,执行如下命令:

mvn test

编译测试程序,执行如下命令:

mvn test-compile

七、如何创建Jar并安装到本地资源库?

先编译程序,再打包程序,执行如下命令:

mvn package

安装程序到本地库,执行如下命令:

mvn install

产生IntelliJ IDEA工程描述,执行如下命令:

mvn idea:idea

产生Eclipse工程描述,执行如下命令:

mvn eclipse:eclipse

打包程序,执行如下命令:

mvn jar:jar,注:如果程序没有编译,打包成的Jar,仅仅包含工程的maven信息。

八、如何使用插件?

Maven 1.0用户注意:加入预执行目标到maven.xml和加入一些实体到project.properties文件中,在这里是有一些不同的。

举例:使用配置JDK编译器,允许JDK 1.5编译源程序。

<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<version>2.0.2</version>

<configuration>

<source>1.5</source>

<target>1.5</target>

</configuration>

</plugin>

</plugins>

</build>

Maven 2.0中的插件,看起来像是一个依赖。

九、如何加入我的资源文件到JAR文件?

main部分,创建标准目录resources/META-INF/资源文件。

十、如何过滤资源文件?

<build>

<resources>

<resource>

<directory>src/main/resources</directory>

<filtering>true</filtering>

</resource>

</resources>

</build>

通过上面指定过滤的资源文件。

1)资源文件引用pom.xml中的内容

资源文件(app.properties)内容如下:

#app.properties

app.name=${pom.name}

app.version=${pom.version}

资源文件中的${pom.name}${pom.version}分别引用了pom.xml文件中内容。执

行如下命令后:

mvn process-resources

资源文件(app.properties)内容变为如下:

#app.properties

app.name=liuyf-app

app.version=1.0-SNAPSHOT

2)资源文件引用外部文件

pom.xml文件添加如下内容到<build>标签。

<filters>

<filter>src/main/filters/filter.properties</filter>

</filters>

资源文件(app.properties)内容如下:

#app.properties

app.name=${pom.name}

app.version=${pom.version}

app.info=${my.filter.value}

外部文件(filter.properties)内容

#filter.properties

my.filter.value=filter content

执行下面命令后:

mvn process-resources

资源文件(app.properties)内容变为如下:

#app.properties

app.name=liuyf-app

app.version=1.0-SNAPSHOT

app.info=filter content

3)引用在pom.xml文件中指定<properties>属性中指定的值。

pom.xml文件加入:

<properties>

<my.filter.value>123456</my.filter.value>

</properties>

4)引用命令行

资源文件内容如下:

#app.properties

app.name=${pom.name}

app.version=${pom.version}

app.info=${command.line.prop}

执行如下命令:

mvn process-resources “-Dcommand.line.prop=789456123”

资源文件内容如下:

#app.properties

app.name=liuyf-app

app.version=1.0-SNAPSHOT

app.info=789456123

十一、如何使用外部依赖?

引用外部依赖需要至少定义四个东西:

groupId

artifactId

version

scope

pom.xml中关于依赖的代码片断:

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>3.8.1</version>

<scope>test</scope>

</dependency>

</dependencies>

其中scope元素表示工程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值