Maven是一个项目管理和理解工具。Maven为开发人员提供了一个完整的创建生命周期框架。开发团队几乎可以自动化项目的打下基础设施,因为Maven使用标准目录布局和默认创建生命周期。
在多个开发团队环境的情况下,Maven可以在很短的时间内根据标准设置工作方式。由于大多数项目设置都是简单和可重复使用的,Maven可以在创建报告,检查,创建和测试自动化设置时轻松开发开发人员的生命。
Maven为开发人员提供了管理以下方法:
建造
文件
报告
依赖关系
SCMs
发布
分配
邮件列表
总而言之,Maven简化了项目创建过程的标准化。它可以无缝地处理编译,分发,文档,团队协作和其他任务。Maven增加了可重用性,并且处理大部分创建相关任务。
Maven最初旨在简化雅加达涡轮项目的建设过程。有几个项目,每个项目包含稍微不同的ANT创建文件。JAR被检查到CVS。
Apache组织然后开发了可以一起创建多个项目的Maven,发布项目信息,部署项目,在多个项目中共享JAR并帮助团队协作。
Maven的主要目标是提供开发人员
一个可重用,可维护,易于理解的项目的综合模型。
与此声明性模型交互的插件或工具。
Maven项目结构和内容在xml文件中声明,pom.xml称为项目对象模型(POM),它是整个Maven系统的基本单元。有关详细信息,请参阅Maven POM部分。
Maven使用Convention over Configuration,这意味着开发人员不需要自己创建创建过程。
开发人员不必提及每一个配置细节。Maven为项目提供合理的默认行为。当创建Maven项目时,Maven将创建默认的项目结构。开发人员只需要相应地放置文件,并且他/她不需要在pom.xml中定义任何配置。
作为示例,下表显示了项目源代码文件,资源文件和其他配置的默认值。假设$ {basedir}表示项目位置:
项目 | 默认 |
---|---|
源代码 | $ {basedir} / src / main / java |
资源 | $ {basedir} / src / main / resources |
测试 | $ {basedir} / src / test |
可分发JAR | $ {basedir} / target |
符合字节码 | $ {basedir} / target / classes |
为了创建项目,Maven为开发人员提供了提及生命周期目标和项目依赖关系的选项(依赖于Maven pluging功能和默认约定)。Maven插件维护了大量项目管理和创建相关任务。
开发人员可以创建任何给定的Maven项目,而无需了解个人插件的工作原理。有关详细信息,请参阅Maven插件部分。
Maven是基于Java的工具,所以第一个要求是在您的机器上安装JDK。
JDK | 1.5以上。 |
---|---|
记忆 | 没有最低要求。 |
磁盘空间 | 没有最低要求。 |
操作系统 | 没有最低要求。 |
现在打开控制台并执行以下java命令。
操作系统 | 任务 | 命令 |
---|---|---|
Windows | 打开命令控制台 | c:> java -version |
Linux | 打开指挥终端 | $ java -version |
苹果电脑 | 打开终端 | 机器:〜joseph $ java -version |
我们来验证所有操作系统的输出:
操作系统 | 输出 |
---|---|
Windows | java版“1.7.0_75”
Java(TM)SE运行时环境(build 1.7.0_75-b13) Java HotSpot(TM)客户端虚拟机(创建24.75-b04,混合模式,共享) |
Linux | java版“1.7.0_75”
Java(TM)SE运行时环境(build 1.7.0_75-b13) Java HotSpot(TM)客户端虚拟机(创建24.75-b04,混合模式,共享) |
苹果电脑 | java版“1.7.0_75”
Java(TM)SE运行时环境(build 1.7.0_75-b13) Java HotSpot(TM)64位服务器虚拟机(创建24.75-b04,混合模式,共享) |
如果您没有安装Java,请安装Java软件开发工具包(SDK) http://www.oracle.com/technetwork/java/javase/downloads/index.html。我们假设Java 1.7.0_75是本教程的安装版本。
将JAVA_HOME环境变量设置为指向机器上安装Java的基本目录位置。例如
操作系统 | 输出 |
---|---|
Windows | 将环境变量JAVA_HOME设置为C: Program Files Java jdk1.7.0_75 |
Linux | 导出JAVA_HOME = / usr / local / java-current |
苹果电脑 | 导出JAVA_HOME = / Library / Java / Home |
将Java编译器位置附加到系统路径。
操作系统 | 输出 |
---|---|
Windows | 将字符stringC: Program Files Java jdk1.7.0_75 bin附加到系统变量Path的末尾。 |
Linux | export PATH = $ PATH:$ JAVA_HOME / bin / |
苹果电脑 | 不需要 |
使用上面解释的java -version命令验证Java安装。
从http://maven.apache.org/download.cgi下载Maven 3.3.3
操作系统 | 存档名称 |
---|---|
Windows | apache-maven-3.3.3-bin.zip |
Linux | apache-maven-3.3.3-bin.tar.gz |
苹果电脑 | apache-maven-3.3.3-bin.tar.gz |
将存档提取到要安装Maven 3.3.3的目录。将从归档文件创建子目录apache-maven-3.3.3。
操作系统 | 位置(可根据您的安装而有所不同) |
---|---|
Windows | C: Program Files Apache Software Foundation apache-maven-3.3.3 |
Linux | / usr / local / apache-maven |
苹果电脑 | / usr / local / apache-maven |
将M2_HOME,M2,MAVEN_OPTS添加到环境变量中。
操作系统 | 输出 |
---|---|
Windows | 使用系统属性设置环境变量。 M2_HOME = C: Program Files Apache Software Foundation apache-maven-3.3.3 M2 =%M2_HOME% bin MAVEN_OPTS = -Xms256m -Xmx512m |
Linux | 打开命令终端并设置环境变量。 导出M2_HOME = / usr / local / apache-maven / apache-maven-3.3.3 导出M2 = $ M2_HOME / bin 导出MAVEN_OPTS = -Xms256m -Xmx512m |
苹果电脑 | 打开命令终端并设置环境变量。 导出M2_HOME = / usr / local / apache-maven / apache-maven-3.3.3 导出M2 = $ M2_HOME / bin 导出MAVEN_OPTS = -Xms256m -Xmx512m |
现在将M2变量附加到系统路径
操作系统 | 输出 |
---|---|
Windows | 将字符string;%M2%追加到系统变量Path的末尾。 |
Linux | export PATH = $ M2:$ PATH |
苹果电脑 | export PATH = $ M2:$ PATH |
现在打开控制台,执行以下mvn命令。
操作系统 | 任务 | 命令 |
---|---|---|
Windows | 打开命令控制台 | c:> mvn --version |
Linux | 打开指挥终端 | $ mvn --version |
苹果电脑 | 打开终端 | 机器:〜joseph $ mvn --version |
最后,验证以上命令的输出结果,具体如下:
操作系统 | 输出 |
---|---|
Windows | Apache Maven 3.3.3(7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T17:27:37 + 05:30)
Maven主页:C: Program Files Apache Software Foundation apache-maven-3.3.3 Java版本:1.7.0_75,供应商:Oracle Corporation Java home:C: Program Files Java jdk1.7.0_75 jre 默认语言环境:en_US,平台编码:Cp1252 |
Linux | Apache Maven 3.3.3(7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T17:27:37 + 05:30)
Maven主页:/usr/local/apache-maven/apache-maven-3.3.3 Java版本:1.7.0_75,供应商:Oracle Corporation Java主页:/usr/local/java-current/jdk1.7.0_75/jre |
苹果电脑 | Apache Maven 3.3.3(7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T17:27:37 + 05:30)
Maven主页:/usr/local/apache-maven/apache-maven-3.3.3 Java版本:1.7.0_75,供应商:Oracle Corporation Java home:/Library/Java/Home/jdk1.7.0_75/jre |
恭喜!您现在都将使用Apache Maven作为您的项目。
POM代表项目对象模型。这是Maven的基本工作单位。它是一个XML文件。它始终作为pom.xml驻留在项目的基本目录中。
POM包含有关项目的信息以及Maven用于创建项目的各种配置详细信息。
POM还包含目标和插件。在执行任务或目标时,Maven会在当前目录中查找POM。它读取POM,获取所需的配置信息,然后执行目标。可以在POM中指定的一些配置如下:
项目依赖
插件
目标
创建配置文件
项目版本
开发商
邮件列表
在创建POM之前,我们应该首先确定项目组(groupId),其name(artifactId)及其版本,因为这些属性有助于在存储库中唯一标识项目。
<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.companyname.project-group</groupId> <artifactId>project</artifactId> <version>1.0</version> </project>
应该注意的是,每个项目应该有一个POM文件。
所有POM文件都需要项目元素和三个必填字段:groupId,artifactId,version。
存储库中的项目符号是groupId:artifactId:version。
POM.xml的根元素是项目,它有三个主要的childNode:
节点 | 描述 |
---|---|
groupId | 这是项目组的ID。这在组织或项目中通常是独一无二的。例如,一家银行集团com.company.bank拥有所有银行相关项目。 |
artifactId | 这是项目的ID。这通常是项目的名称。例如,消费银行。与groupId一起,artifactId定义了工件在存储库中的位置。 |
版 | 这是项目的版本。使用groupId,它在工件的存储库中用于将版本彼此分离。例如:
com.company.bank:consumer-banking:1.0 com.company.bank:consumer-banking:1.1。 |
所有POM都从父级继承(尽管已明确定义)。这个基础POM被称为超级POM,并包含默认值继承的值。
Maven使用有效的pom(配置从超级pom加项目配置)执行相关目标。它帮助开发人员在他/她的pom.xml中指定最小配置细节。虽然可以轻松地覆盖配置。
查看超级POM的默认配置的简单方法是运行以下命令:mvn help:effective-pom
在您的计算机上的任何目录中创建一个pom.xml。使用上述示例pom的内容。
在下面的例子中,我们在C: MVN project文件夹中创建了一个pom.xml。
现在打开命令控制台,去包含pom.xml的文件夹,然后执行下面的mvn命令。
C:MVNproject>mvn help:effective-pom
Maven将开始处理和显示有效的pom。
[INFO] Scanning for projects... [INFO] Searching repository for plugin with prefix: "help". [INFO] ------------------------------------------------------------------------ [INFO] Building Unnamed - com.companyname.project-group:project-name:jar:1.0 [INFO] task-segment: [help:effective-pom] (aggregator-style) [INFO] ------------------------------------------------------------------------ [INFO] [help:effective-pom {execution: default-cli}] [INFO] ..... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: < 1 second [INFO] Finished at: Thu Jul 05 11:41:51 IST 2012 [INFO] Final Memory: 6M/15M [INFO] ------------------------------------------------------------------------
在控制台中显示有效的POM,继承,插值和配置文件后应用。
<!-- ====================================================================== --> <!-- --> <!-- Generated by Maven Help Plugin on 2015-09-26T07:51:19 --> <!-- See: http://maven.apache.org/plugins/maven-help-plugin/ --> <!-- --> <!-- ====================================================================== --> <!-- ====================================================================== --> <!-- --> <!-- Effective POM for project --> <!-- "com.companyname.project-group:project:jar:1.0" --> <!-- --> <!-- ====================================================================== --> <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 h ttp://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.project-group</groupId> <artifactId>project</artifactId> <version>1.0</version> <repositories> <repository> <snapshots> <enabled>false</enabled> </snapshots> <id>central</id> <name>Central Repository</name> <url>https://repo.maven.apache.org/maven2</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <releases> <updatePolicy>never</updatePolicy> </releases> <snapshots> <enabled>false</enabled> </snapshots> <id>central</id> <name>Central Repository</name> <url>https://repo.maven.apache.org/maven2</url> </pluginRepository> </pluginRepositories> <build> <sourceDirectory>C:MVNprojectsrcmainjava</sourceDirectory> <scriptSourceDirectory>C:MVNprojectsrcmainscripts</scriptSourceDirector y> <testSourceDirectory>C:MVNprojectsrc estjava</testSourceDirectory> <outputDirectory>C:MVNproject argetclasses</outputDirectory> <testOutputDirectory>C:MVNproject arget est-classes</testOutputDirectory > <resources> <resource> <directory>C:MVNprojectsrcmain esources</directory> </resource> </resources> <testResources> <testResource> <directory>C:MVNprojectsrc est esources</directory> </testResource> </testResources> <directory>C:MVNproject arget</directory> <finalName>project-1.0</finalName> <pluginManagement> <plugins> <plugin> <artifactId>maven-antrun-plugin</artifactId> <version>1.3</version> </plugin> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.2-beta-5</version> </plugin> <plugin> <artifactId>maven-dependency-plugin</artifactId> <version>2.8</version> </plugin> <plugin> <artifactId>maven-release-plugin</artifactId> <version>2.3.2</version> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>2.5</version> <executions> <execution> <id>default-clean</id> <phase>clean</phase> <goals> <goal>clean</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.4</version> <executions> <execution> <id>default-install</id> <phase>install</phase> <goals> <goal>install</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>2.6</version> <executions> <execution> <id>default-resources</id> <phase>process-resources</phase> <goals> <goal>resources</goal> </goals> </execution> <execution> <id>default-testResources</id> <phase>process-test-resources</phase> <goals> <goal>testResources</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.12.4</version> <executions> <execution> <id>default-test</id> <phase>test</phase> <goals> <goal>test</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <executions> <execution> <id>default-testCompile</id> <phase>test-compile</phase> <goals> <goal>testCompile</goal> </goals> </execution> <execution> <id>default-compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <executions> <execution> <id>default-jar</id> <phase>package</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.7</version> <executions> <execution> <id>default-deploy</id> <phase>deploy</phase> <goals> <goal>deploy</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-site-plugin</artifactId> <version>3.3</version> <executions> <execution> <id>default-site</id> <phase>site</phase> <goals> <goal>site</goal> </goals> <configuration> <outputDirectory>C:MVNproject argetsite</outputDirectory> <reportPlugins> <reportPlugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> </reportPlugin> </reportPlugins> </configuration> </execution> <execution> <id>default-deploy</id> <phase>site-deploy</phase> <goals> <goal>deploy</goal> </goals> <configuration> <outputDirectory>C:MVNproject argetsite</outputDirectory> <reportPlugins> <reportPlugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> </reportPlugin> </reportPlugins> </configuration> </execution> </executions> <configuration> <outputDirectory>C:MVNproject argetsite</outputDirectory> <reportPlugins> <reportPlugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> </reportPlugin> </reportPlugins> </configuration> </plugin> </plugins> </build> <reporting> <outputDirectory>C:MVNproject argetsite</outputDirectory> </reporting> </project>
在上述pom.xml中,您可以在执行所需目标时看到默认的项目源文件夹结构,输出目录,必需的插件,存储库,Maven将使用的报告目录。
Maven pom.xml也不需要手动写入。
Maven提供了许多prototype插件来创建项目,以便创建项目结构和pom.xml
甲创建生命周期是一个良好定义的限定在其中的目标是要被执行的顺序相的序列。这里的阶段是生命周期的一个阶段。
例如,典型的Maven创建生命周期由以下的阶段组成
相 | 把手 | 描述 |
---|---|---|
准备资源 | 资源复制 | 资源复制可以在这个阶段进行定制。 |
编译 | 汇编 | 源代码编译在这个阶段完成。 |
包 | 打包 | 此阶段将按照POM.xml中的打包方式创建JAR / WAR包。 |
安装 | 安装 | 此阶段将软件包安装在本地/远程的maven存储库中。 |
总有一些前期和后期阶段,可用于注册目标,必须之前或特定阶段之后运行。
当Maven开始创建项目时,它将逐步执行一个定义的阶段序列,并执行在每个阶段注册的目标。Maven有以下三个标准生命周期:
清洁
默认(或创建)
现场
一个目标代表了一个有助于项目建设和管理的具体任务。它可能被限制在零个或多个创建阶段。不限于任何创建阶段的目标可以通过直接调用在创建生命周期之外执行。
执行顺序取决于调用目标和创建阶段的顺序。例如,考虑下面的命令。clean和package参数是创建阶段,而依赖关系:copy-dependencies是一个目标。
mvn clean dependency:copy-dependencies package
这里首先执行干净阶段,然后执行依赖关系:依赖关系的目标,最后执行包相。
当我们执行mvn post-clean命令时,Maven调用包含以下阶段的清洁生命周期。
预清洁
清洁
后清洁
Maven的清洁目标(清洁:清洁)绑定到干净的清洁生命周期阶段。它的干净:干净的目标通过删除创建目录来删除创建的输出。因此,当mvn clean命令执行时,Maven将删除创建目录。
我们可以通过提及清洁生命周期的上述任何阶段中的目标来定制此行为。
在下面的例子中,我们将附加maven-antrun-plugin:运行目标到预清洁,清洁和清洁后阶段。这将允许我们回显显示清洁生命周期阶段的短信息。
我们在C: MVN project文件夹中创建了一个pom.xml。
<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.companyname.projectgroup</groupId> <artifactId>project</artifactId> <version>1.0</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>id.pre-clean</id> <phase>pre-clean</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>pre-clean phase</echo> </tasks> </configuration> </execution> <execution> <id>id.clean</id> <phase>clean</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>clean phase</echo> </tasks> </configuration> </execution> <execution> <id>id.post-clean</id> <phase>post-clean</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>post-clean phase</echo> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
现在打开命令控制台,转到包含pom.xml的文件夹,然后执行以下mvn命令。
C:MVNproject>mvn post-clean
Maven将开始处理和显示清洁生命周期的所有阶段
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building project 1.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-antrun-plugin:1.1:run (id.pre-clean) @ project --- [INFO] Executing tasks [echo] pre-clean phase [INFO] Executed tasks [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ project --- [INFO] [INFO] --- maven-antrun-plugin:1.1:run (id.clean) @ project --- [INFO] Executing tasks [echo] clean phase [INFO] Executed tasks [INFO] [INFO] --- maven-antrun-plugin:1.1:run (id.post-clean) @ project --- [INFO] Executing tasks [echo] post-clean phase [INFO] Executed tasks [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.078 s [INFO] Finished at: 2015-09-26T08:03:06+05:30 [INFO] Final Memory: 7M/247M [INFO] ------------------------------------------------------------------------
您可以尝试调整 mvn clean命令,这将显示预清洁和清洁,没有任何内容将执行后清洁阶段。
这是Maven的主要生命周期,用于创建应用程序。它有23个阶段。
生命周期阶段 | 描述 |
---|---|
验证 | 验证项目是否正确,并且所有必需的信息都可用于完成创建过程。 |
初始化 | 初始化创建状态,例如设置属性 |
生成源 | 生成要包含在编译阶段的任何源代码。 |
流程来源 | 处理源代码,例如,过滤任何值。 |
生成资源 | 生成包含在包中的资源。 |
流程资源 | 将资源复制并处理到目标目录,准备打包阶段。 |
编译 | 编译项目的源代码。 |
过程类 | 从编译中处理生成的文件,例如对Java类进行字节码增强/优化。 |
生成测试源 | 生成要包含在编译阶段的任何测试源代码。 |
过程测试源 | 处理测试源代码,例如过滤任何值。 |
测试编译 | 将测试源代码编译成测试目标目录。 |
过程测试类 | 从测试代码文件编译处理生成的文件。 |
测试 | 使用合适的单元测试框架运行测试(Junit是一个)。 |
准备包装 | 在实际包装之前,执行必要的操作来准备包装。 |
包 | 拿出编译的代码,并以其可分发的格式打包,例如JAR,WAR或EAR文件。 |
预集成测试 | 在执行集成测试之前执行所需的操作。例如,设置所需的环境。 |
集成测试 | 如果需要,可以将该包过程并部署到可以运行集成测试的环境中。 |
后整合测试 | 执行集成测试后执行所需的操作。例如,清理环境。 |
校验 | 运行任何检查以验证包装是否有效并符合质量标准。 |
安装 | 将软件包安装到本地存储库中,可以将其用作本地其他项目的依赖项。 |
部署 | 将最终软件包复制到远程存储库,以便与其他开发人员和项目共享。 |
有关Maven生命周期的几个重要概念值得一提:
当通过Maven命令调用一个阶段时,例如mvn编译,只有阶段才能执行。
根据包装类型(JAR / WAR / EAR),不同的maven目标将绑定到Maven生命周期的不同阶段。
在下面的示例中,我们将附加maven-antrun-plugin:运行目标到Build生命周期的几个阶段。这将允许我们回显显示生命周期阶段的短信。
我们已经在C: MVN project文件夹中更新了pom.xml。
<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.companyname.projectgroup</groupId> <artifactId>project</artifactId> <version>1.0</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>id.validate</id> <phase>validate</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>validate phase</echo> </tasks> </configuration> </execution> <execution> <id>id.compile</id> <phase>compile</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>compile phase</echo> </tasks> </configuration> </execution> <execution> <id>id.test</id> <phase>test</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>test phase</echo> </tasks> </configuration> </execution> <execution> <id>id.package</id> <phase>package</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>package phase</echo> </tasks> </configuration> </execution> <execution> <id>id.deploy</id> <phase>deploy</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>deploy phase</echo> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
现在打开命令控制台,去包含pom.xml的文件夹,然后执行下面的mvn命令。
C:MVNproject>mvn compile
Maven将开始处理和显示创建生命周期的阶段,直到编译阶段。
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building project 1.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-antrun-plugin:1.1:run (id.validate) @ project --- [INFO] Executing tasks [echo] validate phase [INFO] Executed tasks [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ project -- - [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:MVNprojectsrcmain esources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ project --- [INFO] No sources to compile [INFO] [INFO] --- maven-antrun-plugin:1.1:run (id.compile) @ project --- [INFO] Executing tasks [echo] compile phase [INFO] Executed tasks [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.704 s [INFO] Finished at: 2015-09-26T08:22:05+05:30 [INFO] Final Memory: 10M/247M [INFO] ------------------------------------------------------------------------
Maven Site plugin通常用于创建新的文档来创建报告,部署站点等。
阶段
网站前
现场
后现场
站点部署
在以下示例中,我们将附加 maven-antrun-plugin:运行目标到站点生命周期的所有阶段。这将允许我们回显显示生命周期阶段的短信。
我们已经在C: MVN project文件夹中更新了pom.xml。
<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.companyname.projectgroup</groupId> <artifactId>project</artifactId> <version>1.0</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>id.pre-site</id> <phase>pre-site</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>pre-site phase</echo> </tasks> </configuration> </execution> <execution> <id>id.site</id> <phase>site</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>site phase</echo> </tasks> </configuration> </execution> <execution> <id>id.post-site</id> <phase>post-site</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>post-site phase</echo> </tasks> </configuration> </execution> <execution> <id>id.site-deploy</id> <phase>site-deploy</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>site-deploy phase</echo> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
现在打开命令控制台,去包含pom.xml的文件夹,然后执行下面的mvn命令。
C:MVNproject>mvn site
Maven将开始处理和显示站点生命周期的阶段。
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building project 1.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-antrun-plugin:1.1:run (id.pre-site) @ project --- [INFO] Executing tasks [echo] pre-site phase [INFO] Executed tasks [INFO] [INFO] --- maven-site-plugin:3.3:site (default-site) @ project --- [WARNING] Report plugin org.apache.maven.plugins:maven-project-info-reports-plug in has an empty version. [WARNING] [WARNING] It is highly recommended to fix these problems because they threaten t he stability of your build. [WARNING] [WARNING] For this reason, future Maven versions might no longer support buildin g such malformed projects. [INFO] configuring report plugin org.apache.maven.plugins:maven-project-info-rep orts-plugin:2.8.1 [WARNING] No project URL defined - decoration links will not be relativized! [INFO] Rendering site with org.apache.maven.skins:maven-default-skin:jar:1.0 ski n. [INFO] Generating "Dependency Convergence" report --- maven-project-info-repo rts-plugin:2.8.1 [INFO] Generating "Dependency Information" report --- maven-project-info-repo rts-plugin:2.8.1 [INFO] Generating "About" report --- maven-project-info-reports-plugin:2.8.1 [INFO] Generating "Plugin Management" report --- maven-project-info-reports-p lugin:2.8.1 [INFO] Generating "Project Plugins" report --- maven-project-info-reports-plu gin:2.8.1 [INFO] Generating "Project Summary" report --- maven-project-info-reports-plu gin:2.8.1 [INFO] [INFO] --- maven-antrun-plugin:1.1:run (id.site) @ project --- [INFO] Executing tasks [echo] site phase [INFO] Executed tasks [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 11.390 s [INFO] Finished at: 2015-09-26T08:43:45+05:30 [INFO] Final Memory: 18M/247M [INFO] ------------------------------------------------------------------------
甲建造轮廓是一组可以用来设置或覆盖Maven创建的默认值配置值。使用创建配置文件,您可以为不同的环境(如生产 v / s 开发环境)定制创建。
Profiles在pom.xml文件中使用其activeProfiles / profiles元素指定,并以各种方式触发。配置文件在创建时修改POM,并用于为参数提供不同的目标环境(例如,开发,测试和生产环境中数据库服务器的路径)。
创建轮廓主要有三种类型
类型 | 在哪里定义 |
---|---|
每项目 | 在项目POM文件中定义,pom.xml |
每个用户 | 在Maven设置中定义xml文件(%USER_HOME%/。m2 / settings.xml) |
全球 | 定义在Maven全局设置中的xml文件(%M2_HOME%/ conf / settings.xml) |
可以以各种方式激活Maven创建配置文件。
明确地使用命令控制台输入。
通过maven设置。
基于环境变量(User / System变量)。
操作系统设置(例如,Windows系列)。
存在/丢失文件。
让我们假设您的项目的以下目录结构:
现在,在src / main / resources下有三个环境特定的文件:
文件名 | 描述 |
---|---|
env.properties | 如果没有提到配置文件,则使用默认配置 |
env.test.properties | 测试配置文件使用时的测试配置。 |
env.prod.properties | 使用prod profile时的生产配置。 |
在下面的例子中,我们将附加maven-antrun-plugin:run目标到测试阶段。这将允许我们回显不同配置文件的短信。我们将使用pom.xml来定义不同的配置文件,并使用maven命令在命令控制台上激活配置文件。
假设我们在C: MVN project文件夹中创建了以下pom.xml。
<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.companyname.projectgroup</groupId> <artifactId>project</artifactId> <version>1.0</version> <profiles> <profile> <id>test</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.1</version> <executions> <execution> <phase>test</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>Using env.test.properties</echo> <copy file="src/main/resources/env.test.properties" tofile ="${project.build.outputDirectory}/env.properties"/> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
假设我们在C: MVN project src resources文件夹中创建了以下属性文件。
env.properties
environment=debug
env.test.properties
environment=test
env.prod.properties
environment=prod
现在打开命令控制台,转到包含pom.xml的文件夹,然后执行以下mvn命令。使用-P选项传递配置文件名称作为参数。
C:MVNproject>mvn test -Ptest
Maven将开始处理并显示测试创建配置文件的结果。
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building project 1.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ project -- - [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 3 resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ project --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ pr oject --- [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:MVNprojectsrc est esources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ project --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ project --- [INFO] Surefire report directory: C:MVNproject argetsurefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.companyname.bank.AppTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.016 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] --- maven-antrun-plugin:1.1:run (default) @ project --- [INFO] Executing tasks [echo] Using env.test.properties [INFO] Executed tasks [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 4.953 s [INFO] Finished at: 2015-09-27T11:54:45+05:30 [INFO] Final Memory: 9M/247M [INFO] ------------------------------------------------------------------------
现在作为练习,您可以执行以下步骤
将另一个配置文件元素添加到pom.xml的配置文件元素(复制现有配置文件元素并将其粘贴到配置文件元素结束)。
将此配置文件元素的ID更新为test。
更新任务部分回显env.properties并将env.properties复制到目标目录
再次重复上面三个步骤,更新id为prod和任务部分为env.prod.properties
就这样。现在,您已经准备好了三个创建配置文件(normal / test / prod)。
现在打开命令控制台,转到包含pom.xml的文件夹,然后执行以下mvn命令。使用-P选项将配置文件名称作为参数传递。
C:MVNproject>mvn test -Pnormal
C:MVNproject>mvn test -Pprod
检查创建的输出以查看差异。
在%USER_HOME%/。m2目录中打开Maven settings.xml文件,其中%USER_HOME%表示用户主目录。如果settings.xml文件不存在,请创建一个新的。
使用activeProfiles节点将测试配置文件添加为活动配置文件,如下例所示
<settings 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/settings-1.0.0.xsd"> <mirrors> <mirror> <id>maven.dev.snaponglobal.com</id> <name>Internal Artifactory Maven repository</name> <url>http://repo1.maven.org/maven2/</url> <mirrorOf>*</mirrorOf> </mirror> </mirrors> <activeProfiles> <activeProfile>test</activeProfile> </activeProfiles> </settings>
现在打开命令控制台,转到包含pom.xml的文件夹,然后执行以下mvn命令。不要使用-P选项传递配置文件名称.Maven将显示测试配置文件为活动配置文件的结果。
C:MVNproject>mvn test
现在删除maven settings.xml中的活动配置文件,并更新pom.xml中提到的测试配置文件。将激活元素添加到配置文件元素,如下所示。
当系统属性“env”用值“test”指定时,测试配置文件将触发。创建环境变量“env”并将其值设置为“test”。
<profile> <id>test</id> <activation> <property> <name>env</name> <value>test</value> </property> </activation> </profile>
让我们打开命令控制台,转到包含pom.xml的文件夹,然后执行下面的mvn命令。
C:MVNproject>mvn test
激活元素包括os细节,如下所示。当系统是Windows XP时,此测试配置文件将触发。
<profile> <id> test </ id> <activation> <os> <name> Windows XP </ name> <family> Windows </ family> <arch> x86 </ arch> <version> 5.1.2600 <版本> </ os> </ activation> </ profile>
现在打开命令控制台,转到包含pom.xml的文件夹,然后执行以下mvn命令。不要使用-P选项传递配置文件名称.Maven将显示测试配置文件为活动配置文件的结果。
C:MVNproject>mvn test
现在激活元素包括os细节如下所示。当target / generated-sources / axistools / wsdl2java / com / companyname / group丢失时,测试配置文件将触发。
<profile> <id>test</id> <activation> <file> <missing>target/generated-sources/axistools/wsdl2java/ com/companyname/group</missing> </file> </activation> </profile>
现在打开命令控制台,转到包含pom.xml的文件夹,然后执行以下mvn命令。不要使用-P选项传递配置文件名称.Maven将显示测试配置文件为活动配置文件的结果。
C:MVNproject>mvn test
在Maven术语中,存储库是一个位置,即所有项目jar,库jar,插件或任何其他项目特定工件都存储并可以轻松使用的目录。
Maven存储库有三种类型
本地
中央
远程
Maven本地存储库是您机器上的文件夹位置。当您第一次运行任何maven命令时,它将被创建。
Maven本地存储库保持您的项目的所有依赖(库jars,插件jar等)。当您运行Maven创建时,Maven会自动将所有依赖关系jar下载到本地存储库。它有助于避免在每次创建项目时存储在远程机器上的依赖关系。
默认情况下,Maven本地存储库由%USER_HOME%目录中的Maven创建。要覆盖默认位置,请在%M2_HOME% conf目录中提供Maven settings.xml文件中的另一个路径。
<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>C:/MyLocalRepository</localRepository> </settings>
当您运行Maven命令时,Maven会将依赖关系下载到您的自定义路径。
Maven中央存储库是由Maven社区提供的存储库。它包含大量常用的库。
当Maven在本地存储库中没有找到任何依赖关系时,它将使用以下URL开始在中央存储库中进行搜索:http : //repo1.maven.org/maven2/
中央信息库的关键概念
此存储库由Maven社区管理。
不需要配置。
它需要互联网访问。
要浏览中央maven仓库的内容,maven社区提供了一个URL:http : //search.maven.org/#browse。使用此库,开发人员可以搜索中央存储库中的所有可用库。
有时候,Maven在中央存储库中没有找到提到的依赖关系,因此它停止了创建过程和输出错误消息到控制台。为了防止这种情况,Maven提供了远程存储库的概念,这是开发人员自己的定制存储库,其中包含所需的库或其他项目jar。
例如,使用下面提到的POM.xml,Maven将从同一个pom.xml中提到的远程存储库中下载依赖关系(在中央存储库中不可用)。
<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.companyname.projectgroup</groupId> <artifactId>project</artifactId> <version>1.0</version> <dependencies> <dependency> <groupId>com.companyname.common-lib</groupId> <artifactId>common-lib</artifactId> <version>1.0.0</version> </dependency> <dependencies> <repositories> <repository> <id>companyname.lib1</id> <url>http://download.companyname.org/maven2/lib1</url> </repository> <repository> <id>companyname.lib2</id> <url>http://download.companyname.org/maven2/lib2</url> </repository> </repositories> </project>
当我们执行Maven创建命令时,Maven将按照以下顺序开始查找依赖库:
步骤1 -在本地存储库中搜索依赖项,如果找不到,则转到步骤2,否则,如果找到,则进行进一步的处理。
步骤2 -在中央存储库中搜索依赖项,如果没有找到并且提到了远程存储库/存储库,则转到步骤4,否则,如果找到,则将其下载到本地存储库以备将来参考。
步骤3 -如果没有提到远程存储库,Maven就会停止处理并抛出错误(无法找到依赖关系)。
步骤4 -在远程存储库或存储库中搜索依赖项,如果找到,则将其下载到本地存储库以供将来参考,否则Maven将按预期停止处理并抛出错误(无法找到依赖关系)。
Maven实际上是一个插件执行框架,每个任务实际上都是由插件完成的。Maven插件通常用于:
创建jar文件
创建战争文件
编译代码文件
代码单元测试
创建项目文档
创建项目报告
插件通常提供一组目标,可以使用以下语法执行:
mvn [plugin-name]:[goal-name]
例如,通过运行以下命令,可以使用maven-compiler-plugin的编译目标来编译Java项目
mvn compiler:compile
Maven提供了以下两种类型的插件:
类型 | 描述 |
---|---|
创建插件 | 它们在创建期间执行,并且应在pom.xml的<build />元素中进行配置 |
报告插件 | 它们在站点生成期间执行,并且应在pom.xml的<reporting />元素中进行配置 |
以下是几个常见插件的列表:
插入 | 描述 |
---|---|
清洁 | 建造后清理目标。删除目标目录。 |
编译器 | 编译Java源文件。 |
surefile | 运行JUnit单元测试。创建测试报告。 |
罐 | 从当前项目创建一个JAR文件。 |
战争 | 从当前项目创建一个WAR文件。 |
javadoc | 为项目生成Javadoc。 |
Ant | 从创建提到的任何阶段运行一组Ant任务。 |
我们在我们的示例中广泛使用了maven-antrun-plugin来在控制台上打印数据。请参阅Maven创建配置文件一章。让我们以更好的方式了解它,让我们在C: MVN project文件夹中创建一个pom.xml。
<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.companyname.projectgroup</groupId> <artifactId>project</artifactId> <version>1.0</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>id.clean</id> <phase>clean</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>clean phase</echo> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
接下来,打开命令控制台,并转到包含pom.xml的文件夹,然后执行以下mvn命令。
C:MVNproject>mvn clean
Maven将开始处理和显示清洁生命周期的清洁阶段
[INFO] Scanning for projects... [INFO] ------------------------------------------------------------------ [INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0 [INFO] task-segment: [post-clean] [INFO] ------------------------------------------------------------------ [INFO] [clean:clean {execution: default-clean}] [INFO] [antrun:run {execution: id.clean}] [INFO] Executing tasks [echo] clean phase [INFO] Executed tasks [INFO] ------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------ [INFO] Total time: < 1 second [INFO] Finished at: Sat Jul 07 13:38:59 IST 2012 [INFO] Final Memory: 4M/44M [INFO] ------------------------------------------------------------------
上面的例子说明了以下关键概念:
插件在pom.xml中使用插件元素指定。
每个插件都可以有多个目标。
您可以使用其相位元素来定义插件应该开始处理的阶段。我们使用了干净的阶段。
您可以通过将其绑定到插件的目标来配置要执行的任务。我们已经绑定回声任务与运行目标的maven-antrun-plugin。
就这样,Maven会处理其余的事情。如果在本地存储库中不可用,它将下载插件,并开始处理。
Maven使用prototype插件创建项目。要创建一个简单的java应用程序,我们将使用maven-archetype-quickstart插件。在下面的例子中,我们将在C: MVN文件夹中创建一个基于maven的java应用程序项目。
我们打开命令控制台,执行C: MVN目录并执行下面的mvn命令。
C:MVN>mvn archetype:generate -DgroupId=com.companyname.bank -DartifactId=consumerBanking -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Maven将开始处理,并将创建完整的java应用程序项目结构。
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Stub Project (No POM) 1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] >>> maven-archetype-plugin:2.4:generate (default-cli) > generate-sources @ standalone-pom >>> [INFO] [INFO] <<< maven-archetype-plugin:2.4:generate (default-cli) < generate-sources @ standalone-pom <<< [INFO] [INFO] --- maven-archetype-plugin:2.4:generate (default-cli) @ standalone-pom -- - [INFO] Generating project in Batch mode [INFO] ------------------------------------------------------------------------- --- [INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.0 [INFO] ------------------------------------------------------------------------- --- [INFO] Parameter: groupId, Value: com.companyname.bank [INFO] Parameter: packageName, Value: com.companyname.bank [INFO] Parameter: package, Value: com.companyname.bank [INFO] Parameter: artifactId, Value: consumerBanking [INFO] Parameter: basedir, Value: C:MVN [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] project created from Old (1.x) Archetype in dir: C:MVNconsumerBanking [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 03:19 min [INFO] Finished at: 2015-09-26T12:18:26+05:30 [INFO] Final Memory: 15M/247M [INFO] ------------------------------------------------------------------------
现在去C:/ MVN目录。您会看到一个名为consumerBanking的java应用程序项目(在artifactId中指定)。Maven使用标准目录布局,如下所示:
使用上面的例子,我们可以理解以下关键概念
文件夹结构 | 描述 |
---|---|
消费者银行 | 包含src文件夹和pom.xml |
src / main / java | 包含java代码文件下的包结构(com / companyName / bank)。 |
src / main / test | 包含测试java代码文件的包结构(com / companyName / bank)。 |
src / main / resources | 它包含图像/属性文件(在上面的例子中,我们需要手动创建这个结构)。 |
如果您看到,Maven还创建了一个示例Java源文件和Java测试文件。打开C: MVN consumerBanking src main java com companyname bank文件夹,你会看到App.java。
package com.companyname.bank; /** * Hello world! * */ public class App { public static void main( String[] args ) { System.out.println( "Hello World!" ); } }
打开C: MVN consumerBanking src test java com companyname bank文件夹,你会看到AppTest.java。
package com.companyname.bank; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; /** * Unit test for simple App. */ public class AppTest extends TestCase { /** * Create the test case * * @param testName name of the test case */ public AppTest( String testName ) { super( testName ); } /** * @return the suite of tests being tested */ public static Test suite() { return new TestSuite( AppTest.class ); } /** * Rigourous Test :-) */ public void testApp() { assertTrue( true ); } }
开发人员需要按照上表所述放置他们的文件,并且Maven处理所有创建相关的复杂性。
在下一节中,我们将探讨如何使用maven Maven创建和测试项目来创建和测试项目。
我们在“项目创建”一章中学到的是如何使用Maven创建Java应用程序。现在我们将看到如何创建和测试应用程序。
转到您创建Java应用程序的C:/ MVN目录。打开consumerBanking文件夹。您将看到包含以下内容的POM.xml文件。
<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.companyname.projectgroup</groupId> <artifactId>project</artifactId> <version>1.0</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> </dependency> </dependencies> </project>
在这里可以看到,Maven已经添加了Junit作为测试框架。默认情况下,Maven 在前一章探讨的默认目录结构中添加了一个源文件App.java和一个测试文件AppTest.java。
让我们打开命令控制台,进入C: MVN consumerBanking目录,然后执行下面的mvn命令。
C:MVNconsumerBanking>mvn clean package
Maven将开始建设项目。
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building consumerBanking 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ consumerBanking --- [INFO] Deleting C:MVNconsumerBanking arget [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ consumerBanking --- [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:MVNconsumerBankingsrcmain esources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ consumerBanking --- [INFO] Changes detected - recompiling the module! [WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent! [INFO] Compiling 1 source file to C:MVNconsumerBanking argetclasses [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ consumerBanking --- [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:MVNconsumerBankingsrc est esources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ consumerBanking --- [INFO] Changes detected - recompiling the module! [WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. b uild is platform dependent! [INFO] Compiling 1 source file to C:MVNconsumerBanking arget est-classes [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ consumerBanking --- [INFO] Surefire report directory: C:MVNconsumerBanking argetsurefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.companyname.bank.AppTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.063 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ consumerBanking --- [INFO] Building jar: C:MVNconsumerBanking argetconsumerBanking-1.0-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 14.406 s [INFO] Finished at: 2015-09-27T17:58:06+05:30 [INFO] Final Memory: 14M/247M [INFO] ------------------------------------------------------------------------
您已经创建了项目并创建了最终的jar文件,以下是关键的学习概念
我们给maven两个目标,首先清理目标目录(clean),然后将项目创建输出打包成jar(包)。
ConsumerBanking-1.0-SNAPSHOT.jar中的consumerBanking target文件夹中提供了打包的jar。
consumerBanking target surefire-reports文件夹中提供测试报告。
Maven编译源代码文件,然后测试源代码文件。
然后Maven运行测试用例。
最后Maven创建了这个包。
现在打开命令控制台,进入C: MVN consumerBanking target classes目录并执行以下java命令。
C:MVNconsumerBanking argetclasses>java com.companyname.bank.App
你会看到结果
Hello World!
我们来看看我们如何在我们的项目中添加额外的Java文件。打开C: MVN consumerBanking src main java com companyname bank文件夹,将Util类创建为Util.java。
package com.companyname.bank; public class Util { public static void printMessage(String message){ System.out.println(message); } }
更新App类以使用Util类。
package com.companyname.bank; /** * Hello world! * */ public class App { public static void main( String[] args ) { Util.printMessage("Hello World!"); } }
现在打开命令控制台,进入C: MVN consumerBanking目录,然后执行下面的mvn命令。
C:MVNconsumerBanking>mvn clean compile
Maven创建成功后,请执行以下命令:C: MVN consumerBanking target classes目录。
C:MVNconsumerBanking argetclasses>java -cp com.companyname.bank.App
你会看到结果
Hello World!
现在你知道Maven使用Maven Repositories的概念进行依赖管理。但是如果任何远程存储库和中央存储库中的依赖关系不可用,会发生什么?Maven使用外部依赖概念为这种场景提供答案。
例如,让我们对在Maven创建项目部分创建的项目进行以下更改。
将lib文件夹添加到src文件夹
将任何jar复制到lib文件夹中。我们使用了ldapjdk.jar,它是LDAP操作的辅助库。
现在我们的项目结构应该如下所示:
在这里,您拥有专属于项目的库,这是非常通常的情况,它可以包含可能在任何存储库中可用的jar,可以从maven下载。如果您的代码使用Maven库,那么Maven创建将会失败,因为在编译阶段无法下载或引用该库。
为了处理这种情况,我们使用以下方式将这个外部依赖关系添加到maven pom.xml中。
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.bank</groupId> <artifactId>consumerBanking</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>consumerBanking</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>ldapjdk</groupId> <artifactId>ldapjdk</artifactId> <scope>system</scope> <version>1.0</version> <systemPath>${basedir}srclibldapjdk.jar</systemPath> </dependency> </dependencies> </project>
在上面的示例中查看依赖关系的第二个依赖元素,它清除关于外部依赖关系的以下关键概念。
外部依赖关系(库jar位置)可以在pom.xml中以与其他依赖关系相同的方式进行配置。
指定groupId与库名称相同。
指定与库名称相同的artifactId。
将范围指定为系统。
指定相对于项目位置的系统路径。
希望现在您清楚外部依赖关系,您将能够在Maven项目中指定外部依赖关系。
本教程将教你如何一次创建应用程序的文档。所以让我们开始,到你创建你的java consumerBanking应用程序的C:/ MVN 目录。打开consumerBanking文件夹并执行以下mvn命令。
C:MVN>mvn site
Maven将开始建设项目。
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building consumerBanking 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-site-plugin:3.3:site (default-site) @ consumerBanking --- [WARNING] Report plugin org.apache.maven.plugins:maven-project-info-reports-plugin has an empty version. [WARNING] [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. [WARNING] [WARNING] For this reason, future Maven versions might no longer support building such malformed projects. [INFO] configuring report plugin org.apache.maven.plugins:maven-project-info-reports-plugin:2.8.1 [INFO] Relativizing decoration links with respect to project URL: http://maven.apache.org [INFO] Rendering site with org.apache.maven.skins:maven-default-skin:jar:1.0 skin. [INFO] Generating "Dependencies" report --- maven-project-info-reports-plugin:2.8.1 [INFO] Generating "Dependency Convergence" report --- maven-project-info-reports-plugin:2.8.1 [INFO] Generating "Dependency Information" report --- maven-project-info-reports-plugin:2.8.1 [INFO] Generating "About" report --- maven-project-info-reports-plugin:2.8.1 [INFO] Generating "Plugin Management" report --- maven-project-info-reports-plugin:2.8.1 [INFO] Generating "Project Plugins" report --- maven-project-info-reports-plugin:2.8.1 [INFO] Generating "Project Summary" report --- maven-project-info-reports-plugin:2.8.1 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 37.828 s [INFO] Finished at: 2015-09-27T12:11:27+05:30 [INFO] Final Memory: 23M/247M [INFO] ------------------------------------------------------------------------
而已。您的项目文档已准备就绪。Maven已经在目标目录中创建了一个站点。
打开C: MVN consumerBanking target site文件夹。点击index.html查看文档。
Maven的使用被称为文件处理引擎创建的文档Doxia读取多个源格式转换为通用文件model.To写你的项目文档,你可以写在由Doxia解析的以下几条常用的格式内容。
格式名称 | 描述 | 参考 |
---|---|---|
易于 | 纯文本格式 | |
XDoc | Maven 1.x文档格式 | |
FML | 用于FAQ文件 | |
XHTML | 可扩展的HTML |
Maven为用户提供了一个使用Archetype概念的不同类型的项目模板(614个数量)的非常大的列表。Maven帮助用户使用以下命令快速启动一个新的Java项目
mvn archetype:generate
Archetype是一个Maven插件,其任务是根据其模板创建一个项目结构。我们将使用quickstart archetype插件在这里创建一个简单的java应用程序。
让我们打开命令控制台,进入C:> MVN目录并执行下面的mvn命令
C:MVN>mvn archetype:generate
Maven将开始处理,并将要求选择所需的prototype
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Stub Project (No POM) 1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] >>> maven-archetype-plugin:2.4:generate (default-cli) > generate-sources@ standalone-pom >>> [INFO] [INFO] <<< maven-archetype-plugin:2.4:generate (default-cli) < generate-sources@ standalone-pom <<< [INFO] [INFO] --- maven-archetype-plugin:2.4:generate (default-cli) @ standalone-pom --- [INFO] Generating project in Interactive mode [WARNING] No archetype found in remote catalog. Defaulting to internal catalog [INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven. archetypes:maven-archetype-quickstart:1.0) Choose archetype: 1: internal -> org.apache.maven.archetypes:maven-archetype-archetype (An archetype which contains a sample archetype.) 2: internal -> org.apache.maven.archetypes:maven-archetype-j2ee-simple (An archetype which contains a simplifed sample J2EE application.) 3: internal -> org.apache.maven.archetypes:maven-archetype-plugin (An archetypewhich contains a sample Maven plugin.) 4: internal -> org.apache.maven.archetypes:maven-archetype-plugin-site (An archetype which contains a sample Maven plugin site. This archetype can be layered upon an existing Maven plugin project.) 5: internal -> org.apache.maven.archetypes:maven-archetype-portlet (An archetype which contains a sample JSR-268 Portlet.) 6: internal -> org.apache.maven.archetypes:maven-archetype-profiles () 7: internal -> org.apache.maven.archetypes:maven-archetype-quickstart (An archetype which contains a sample Maven project.) 8: internal -> org.apache.maven.archetypes:maven-archetype-site (An archetype which contains a sample Maven site which demonstrates some of the supported document types like APT, XDoc, and FML and demonstrates how to i18n your site. This archetype can be layered upon an existing Maven project.) 9: internal -> org.apache.maven.archetypes:maven-archetype-site-simple (An archetype which contains a sample Maven site.) 10: internal -> org.apache.maven.archetypes:maven-archetype-webapp (An archetype which contains a sample Maven Webapp project.) Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 7:
按Enter键选择默认选项(7:maven-archetype-quickstart)。Maven将要求项目细节。按要求输入项目详细信息。如果提供了默认值,请按Enter键。您可以通过输入自己的值来覆盖它们。
Define value for property "groupId": : com.companyname.insurance Define value for property "artifactId": : health Define value for property "version": 1.0-SNAPSHOT: Define value for property "package": com.companyname.insurance:
Maven将要求项目细节确认。按enter键或按Y
Confirm properties configuration: groupId: com.companyname.insurance artifactId: health version: 1.0-SNAPSHOT package: com.companyname.insurance Y:
现在,Maven将开始创建项目结构,并将显示以下内容:
[INFO] ------------------------------------------------------------------------- --- [INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1 [INFO] ------------------------------------------------------------------------- --- [INFO] Parameter: groupId, Value: com.companyname.insurance [INFO] Parameter: packageName, Value: com.companyname.insurance [INFO] Parameter: package, Value: com.companyname.insurance [INFO] Parameter: artifactId, Value: health [INFO] Parameter: basedir, Value: C:MVN [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] project created from Old (1.x) Archetype in dir: C:MVNhealth [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 02:29 min [INFO] Finished at: 2015-09-27T12:18:02+05:30 [INFO] Final Memory: 16M/247M [INFO] ------------------------------------------------------------------------
现在去C:> MVN目录。您将看到一个名为health的java应用程序项目,在项目创建时被赋予为artifactId。Maven将为项目创建一个标准目录布局,如下所示:
Maven为项目生成一个POM.xml文件,如下所示:
<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.companyname.insurance</groupId> <artifactId>health</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>health</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
Maven生成示例java源文件,项目的App.java如下所示:
位置:C:> MVN>健康> src> main> java> com> companyname> insurance> App.java
package com.companyname.insurance; /** * Hello world! * */ public class App { public static void main( String[] args ) { System.out.println( "Hello World!" ); } }
Maven生成示例java源测试文件,该项目的AppTest.java如下所示:
位置:C:> MVN>健康> src> test> java> com> companyname> insurance> AppTest.java
package com.companyname.insurance; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; /** * Unit test for simple App. */ public class AppTest extends TestCase { /** * Create the test case * * @param testName name of the test case */ public AppTest( String testName ) { super( testName ); } /** * @return the suite of tests being tested */ public static Test suite() { return new TestSuite( AppTest.class ); } /** * Rigourous Test :-) */ public void testApp() { assertTrue( true ); } }
而已。现在你可以看到Maven的Grav。您可以使用maven中的单一命令创建任何类型的项目,并可以启动您的开发。
大型软件应用程序通常由多个模块组成,而多个团队正在使用相同应用程序的不同模块的常见情况。例如,考虑一个团队正在应用程序的前端工作(app-ui.jar:1.0),并且正在使用数据服务项目(data-service.jar:1.0)。
现在可能发生的是,数据服务团队正在迅速进行错误修复或增强,并且几乎每隔一天将库释放到远程存储库。
现在如果数据服务团队每隔一天上传一个新版本,那么会出现以下问题
每当他们发布更新的代码时,数据服务团队应该告诉应用团队。
应用程序团队需要定期更新其pom.xml以获取更新的版本
为了处理这种情况,SNAPSHOT概念发挥作用。
SNAPSHOT是一个特殊版本,表示当前的开发副本。与常规版本不同,Maven在每个创建的远程存储库中检查新的SNAPSHOT版本。
现在,数据服务团队将每次发布SNAPSHOT其更新的代码到存储库说数据服务:1.0-SNAPSHOT替换旧的SNAPSHOT jar。
在版本的情况下,如果Maven一旦下载了所提到的版本,则说data-service:1.0,它永远不会尝试下载存储库中的较新版本1.0。要下载更新的代码,数据服务版本将升级到1.1。
在SNAPSHOT的情况下,Maven会自动获取最新的SNAPSHOT(数据服务:1.0-SNAPSHOT),每个应用程序团队都可以创建其项目。
app-ui项目正在使用1.0-SNAPSHOT的数据服务
<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>app-ui</groupId> <artifactId>app-ui</artifactId> <version>1.0</version> <packaging>jar</packaging> <name>health</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>data-service</groupId> <artifactId>data-service</artifactId> <version>1.0-SNAPSHOT</version> <scope>test</scope> </dependency> </dependencies> </project>
数据服务项目正在为每一个微小的变化发布1.0-SNAPSHOT
<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>data-service</groupId> <artifactId>data-service</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>health</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> </project>
虽然,在SNAPSHOT的情况下,Maven每天自动获取最新的SNAPSHOT。您可以强制maven使用-U切换到任何maven命令下载最新的快照创建。
mvn clean package -U
我们打开命令控制台,然后执行C:> MVN> app-ui目录,然后执行下面的mvn命令。
C:MVNapp-ui>mvn clean package -U
下载最新的SNAPSHOT数据服务后,Maven将开始创建该项目。
[INFO] Scanning for projects... [INFO] ------------------------------------------------------------------- [INFO] Building consumerBanking [INFO] task-segment: [clean, package] [INFO] ------------------------------------------------------------------- [INFO] Downloading data-service:1.0-SNAPSHOT [INFO] 290K downloaded. [INFO] [clean:clean {execution: default-clean}] [INFO] Deleting directory C:MVNapp-ui arget [INFO] [resources:resources {execution: default-resources}] [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:MVNapp-uisrcmain resources [INFO] [compiler:compile {execution: default-compile}] [INFO] Compiling 1 source file to C:MVNapp-ui argetclasses [INFO] [resources:testResources {execution: default-testResources}] [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:MVNapp-uisrc est resources [INFO] [compiler:testCompile {execution: default-testCompile}] [INFO] Compiling 1 source file to C:MVNapp-ui arget est-classes [INFO] [surefire:test {execution: default-test}] [INFO] Surefire report directory: C:MVNapp-ui arget surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.companyname.bank.AppTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.027 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [jar:jar {execution: default-jar}] [INFO] Building jar: C:MVNapp-ui arget app-ui-1.0-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2 seconds [INFO] Finished at: 2015-09-27T12:30:02+05:30 [INFO] Final Memory: 16M/89M [INFO] ------------------------------------------------------------------------
创建自动化定义了一旦项目创建成功完成后依赖项目创建过程开始的场景,以确保依赖项目是稳定的。
考虑一个团队正在开发一个项目bus_core_api,其中另外两个项目app_web_ui和app_desktop_ui依赖。bus_core_api项目存在于C:> MVN目录中,app_web_ui和app_desktop_ui存在于C:> MVN> projects目录中
app_web_ui项目正在使用bus_core_api项目的1.0-SNAPSHOT
<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>app_web_ui</groupId> <artifactId>app_web_ui</artifactId> <version>1.0</version> <packaging>jar</packaging> <name>app_web_ui</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>bus_core_api</groupId> <artifactId>bus_core_api</artifactId> <version>1.0-SNAPSHOT</version> <scope>system</scope> <systemPath>C:MVNus_core_api argetus_core_api-1.0-SNAPSHOT.jar</systemPath> </dependency> </dependencies> </project>
app_desktop_ui项目正在使用bus_core_api项目的1.0-SNAPSHOT
<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>app_desktop_ui</groupId> <artifactId>app_desktop_ui</artifactId> <version>1.0</version> <packaging>jar</packaging> <name>app_desktop_ui</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>bus_core_api</groupId> <artifactId>bus_core_api</artifactId> <version>1.0-SNAPSHOT</version> <scope>system</scope> <systemPath>C:MVNus_core_api argetus_core_api-1.0-SNAPSHOT.jar</systemPath> </dependency> </dependencies> </project>
bus_core_api项目
<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>bus_core_api</groupId> <artifactId>bus_core_api</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> </project>
现在,app_web_ui和app_desktop_ui项目的团队需要在bus_core_api项目更改时,其创建过程应该启动。
使用快照可以确保使用最新的bus_core_api项目,但是要满足上述要求,我们需要做一些额外的事情。
我们有两种方法
在bus_core_api pom中添加一个后期制作目标,以启动app_web_ui和app_desktop_ui创建。
使用像Hudson这样的连续集成(CI)服务器自动管理创建自动化。
更新bus_core_api项目pom.xml
<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>bus_core_api</groupId> <artifactId>bus_core_api</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <build> <plugins> <plugin> <artifactId>maven-invoker-plugin</artifactId> <version>2.0.0</version> <configuration> <debug>true</debug> <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo> <projectsDirectory>C:/MVN/projects</projectsDirectory> </configuration> <executions> <execution> <id>integration-test</id> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
我们打开命令控制台,然后打开C:> MVN> bus_core_api目录,然后执行下面的mvn命令。
C:MVNus_core_api>mvn verify
Maven将开始创建项目bus_core_api。
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building bus_core_api 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ bus_core_api --- [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:MVNus_core_apisrcmain esources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ bus_core_api --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ bus_core_api --- [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:MVNus_core_apisrc est esources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ bus_core_api --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ bus_core_api --- [INFO] Surefire report directory: C:MVNus_core_api argetsurefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running bus_core_api.AppTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.047 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ bus_core_api --- [INFO] [INFO] --- maven-invoker-plugin:2.0.0:run (integration-test) @ bus_core_api --- [WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent! [INFO] Building: app_desktop_uipom.xml [INFO] ..SUCCESS (10.7 s) [INFO] Building: app_web_uipom.xml [INFO] ..SUCCESS (11.5 s) [INFO] Building: bus_core_apipom.xml [INFO] ..SUCCESS (12.8 s) [INFO] ------------------------------------------------- [INFO] Build Summary: [INFO] Passed: 3, Failed: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------- [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 42.421 s [INFO] Finished at: 2015-09-27T17:41:42+05:30 [INFO] Final Memory: 12M/247M [INFO] ------------------------------------------------------------------------
使用CI服务器是更可取的,因为开发人员不需要每次新的项目更新bus_core_api项目pom,例如app-mobile-ui作为bus_core_api项目上的依赖项目添加。Hudson使用Maven依赖关系管理自动管理创建自动化。
哈德森认为每一个项目的建设都是工作。一旦将项目代码签入SVN(或映射到Hudson的任何源代码管理工具),Hudson将启动其创建作业,一旦完成此作业,它将自动启动其他从属作业(其他相关项目)。
在上面的例子中,当在SVN中更新bus-core-ui源代码时,Hudson开始创建。一旦创建成功。Hudson自动查找依赖项目,并开始创建app_web_ui和app_desktop_ui项目。
在项目开发中,通常部署过程由以下步骤组成
签入所有正在进行的项目的代码到SVN或源代码存储库并对其进行标记。
从SVN下载完整的源代码。
创建应用程序。
将创建输出存储在WAR或EAR文件到公共网络位置。
从网络获取文件并将文件部署到生产站点。
更新了具有应用程序日期和更新版本号的文档。
上述部署过程中通常有多个人参与。一个团队可以处理代码的签入,其他的可以处理创建等等。由于涉及手工和多团队环境,任何步骤很可能会被错过。例如,旧版本可能无法在网络机器上替换,部署团队再次部署旧版本。
Maven,建设和发布项目,
SubVersion,源代码库,用于管理源代码,
和远程存储库管理器(Jfrog / Nexus)来管理项目二进制文件。
我们将使用Maven Release插件来创建一个自动发布过程。
例如:bus-core-api项目POM.xml
<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>bus-core-api</groupId> <artifactId>bus-core-api</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <scm> <url>http://www.svn.com</url> <connection>scm:svn:http://localhost:8080/svn/jrepo/trunk/ Framework</connection> <developerConnection>scm:svn:${username}/${password}@localhost:8080: common_core_api:1101:code</developerConnection> </scm> <distributionManagement> <repository> <id>Core-API-Java-Release</id> <name>Release repository</name> <url>http://localhost:8081/nexus/content/repositories/ Core-Api-Release</url> </repository> </distributionManagement> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-release-plugin</artifactId> <version>2.0-beta-9</version> <configuration> <useReleaseProfile>false</useReleaseProfile> <goals>deploy</goals> <scmCommentPrefix>[bus-core-api-release-checkin]-< /scmCommentPrefix> </configuration> </plugin> </plugins> </build> </project>
在Pom.xml中,以下是我们使用的重要元素
元件 | 描述 |
---|---|
SCM | 配置SVN位置,从那里Maven将检出源代码。 |
存储库 | 创建WAR / EAR / JAR或任何其他工件将在代码创建成功后存储的位置。 |
插入 | maven-release-plugin配置为自动执行部署过程。 |
Maven使用maven-release-plugin执行以下有用的任务。
mvn release:clean
它会清除工作区,以防上次发布过程失败。
mvn release:rollback
回滚对工作区代码和配置的更改,以防上次发布过程失败。
mvn release:prepare
执行多个操作
检查是否有任何未提交的本地更改
确保没有SNAPSHOT依赖关系
更改应用程序的版本,并从版本中删除SNAPSHOT以进行发布
将pom文件更新为SVN。
运行测试用例
提交修改后的POM文件
标记颠覆中的代码
增加版本号并附加SNAPSHOT以供将来发布
将修改的POM文件提交给SVN。
mvn release:perform
使用先前定义的标签检查代码,并运行Maven部署目标,以将war或创建的artifact部署到存储库。
让我们打开命令控制台,去C:> MVN> bus-core-api目录,然后执行下面的mvn命令。
C:MVNus-core-api>mvn release:prepare
Maven将开始建设项目。一旦创建成功,运行以下mvn命令。
C:MVNus-core-api>mvn release:perform
一旦创建成功,您可以验证存储库中上传的JAR文件。
本教程将教您如何使用版本控制系统Maven管理基于Web的项目。在这里,您将学习如何创建/创建/部署和运行Web应用程序:
要创建一个简单的java Web应用程序,我们将使用maven-archetype-webapp插件。所以让我们打开命令控制台,去C: MVN目录并执行下面的mvn命令。
C:MVN>mvn archetype:generate -DgroupId=com.companyname.automobile -DartifactId=trucks -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
Maven将开始处理,并将创建完整的基于Web的Java应用程序项目结构。
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Stub Project (No POM) 1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] >>> maven-archetype-plugin:2.4:generate (default-cli) > generate-sources @ standalone-pom >>> [INFO] [INFO] <<< maven-archetype-plugin:2.4:generate (default-cli) < generate-sources @ standalone-pom <<< [INFO] [INFO] --- maven-archetype-plugin:2.4:generate (default-cli) @ standalone-pom -- - [INFO] Generating project in Batch mode [WARNING] No archetype found in remote catalog. Defaulting to internal catalog [INFO] ------------------------------------------------------------------------- --- [INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-webapp:1.0 [INFO] ------------------------------------------------------------------------- --- [INFO] Parameter: groupId, Value: com.companyname.automobile [INFO] Parameter: packageName, Value: com.companyname.automobile [INFO] Parameter: package, Value: com.companyname.automobile [INFO] Parameter: artifactId, Value: trucks [INFO] Parameter: basedir, Value: C:MVN [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] project created from Old (1.x) Archetype in dir: C:MVN rucks [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 19.016 s [INFO] Finished at: 2015-09-27T17:47:56+05:30 [INFO] Final Memory: 16M/247M [INFO] ------------------------------------------------------------------------
现在去C:/ MVN目录。您将看到一个名为卡车的java应用程序项目(在artifactId中指定)。
Maven使用标准目录布局。使用上面的例子,我们可以理解以下关键概念
文件夹结构 | 描述 |
---|---|
卡车 | 包含src文件夹和pom.xml |
src / main / webapp | 包含index.jsp和WEB-INF文件夹。 |
src / main / webapp / WEB-INF | 包含web.xml |
src / main / resources | 它包含图像/属性文件。 |
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.automobile</groupId> <artifactId>trucks</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>trucks Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>trucks</finalName> </build> </project>
如果您看到,Maven还创建了一个示例JSP源文件
打开 C:> MVN>卡车> src> main> webapp>文件夹,你会看到index.jsp。
<html> <body> <h2>Hello World!</h2> </body> </html>
我们打开命令控制台,执行C: MVN trucks目录,然后执行下面的mvn命令。
C:MVN rucks>mvn clean package
Maven将开始建设项目。
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building trucks Maven Webapp 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ trucks --- [INFO] Deleting C:MVN rucks arget [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ trucks --- [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ trucks --- [INFO] No sources to compile [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ tr ucks --- [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:MVN ruckssrc est esources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ trucks --- [INFO] No sources to compile [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ trucks --- [INFO] No tests to run. [INFO] [INFO] --- maven-war-plugin:2.2:war (default-war) @ trucks --- [INFO] Packaging webapp [INFO] Assembling webapp [trucks] in [C:MVN rucks arget rucks] [INFO] Processing war project [INFO] Copying webapp resources [C:MVN ruckssrcmainwebapp] [INFO] Webapp assembled in [93 msecs] [INFO] Building war: C:MVN rucks arget rucks.war [INFO] WEB-INFweb.xml already added, skipping [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 4.766 s [INFO] Finished at: 2015-09-27T17:53:05+05:30 [INFO] Final Memory: 11M/247M [INFO] ------------------------------------------------------------------------
现在,复制trucks.war中创建C:> MVN>货车>目标>文件夹到你的Web服务器的webapps目录下,并重新启动Web服务器。
使用URL运行Web应用程序:http:// <server-name>:<port-number> /trucks/index.jsp
验证输出。
Eclipse提供了一个优秀的插件m2eclipse,它将Maven和Eclipse无缝集成在一起。
下面列出了一些m2eclipse的特性
您可以从Eclipse运行Maven目标。
您可以使用自己的控制台查看Eclipse内的Maven命令的输出。
您可以使用IDE更新maven依赖关系。
您可以从Eclipse中启动Maven创建。
它基于Maven的pom.xml执行Eclipse创建路径的依赖关系管理。
它解决了Eclipse工作空间中的Maven依赖关系,而无需安装到本地的Maven仓库(需要依赖项目位于同一工作区)。
它从远程Maven存储库自动下载所需的依赖项和源。
它为创建新的Maven项目pom.xml提供向导,并启用对现有项目的Maven支持
它可以快速搜索远程Maven存储库中的依赖关系
使用以下链接之一来安装m2eclipse:
蚀 | 网址 |
---|---|
Eclipse 3.5(Gallileo) | |
Eclipse 3.6(Helios) |
以下示例将帮助您充分利用集成Eclipse和maven的优势。
打开Eclipse
选择文件>导入>选项。
选择Maven项目选项。点击下一步按钮。
选择项目位置,使用Maven创建一个项目。我们创建了一个Java Project consumerBanking.See Maven创建项目,以了解如何使用Maven创建一个项目。
单击完成按钮。
现在,您可以在eclipse中看到maven项目。
现在,看看consumerBanking的项目属性。你可以看到,Eclipse已经将Maven依赖项添加到了java创建路径中。
现在,它使用eclipse的maven功能来创建这个项目。
右键单击consumerBanking项目以打开上下文菜单。
选择运行为选项
然后maven包选项
Maven将开始建设项目。您可以在Eclipse控制台中看到输出
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building consumerBanking 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ consumerBanking --- [INFO] Deleting C:MVNconsumerBanking arget [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ consumerBanking --- [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:MVNconsumerBankingsrcmain esources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ consumerBanking --- [INFO] Changes detected - recompiling the module! [WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent! [INFO] Compiling 1 source file to C:MVNconsumerBanking argetclasses [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ consumerBanking --- [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:MVNconsumerBankingsrc est esources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ consumerBanking --- [INFO] Changes detected - recompiling the module! [WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. b uild is platform dependent! [INFO] Compiling 1 source file to C:MVNconsumerBanking arget est-classes [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ consumerBanking --- [INFO] Surefire report directory: C:MVNconsumerBanking argetsurefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.companyname.bank.AppTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.063 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ consumerBanking --- [INFO] Building jar: C:MVNconsumerBanking argetconsumerBanking-1.0-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 14.406 s [INFO] Finished at: 2015-09-27T17:58:06+05:30 [INFO] Final Memory: 14M/247M [INFO] ------------------------------------------------------------------------
现在,右键单击App.java。选择运行方式选项。选择作为Java应用程序。
你会看到结果
Hello World!
NetBeans 6.7和更新版本对Maven具有内置支持。在以前的版本中,Maven插件在插件管理器中可用。在这个例子中我们使用的是NetBeans 6.9。
下面列出了NetBeans的一些功能
您可以从NetBeans运行Maven目标。
您可以使用自己的控制台查看NetBeans内的Maven命令的输出。
您可以使用IDE更新maven依赖关系。
您可以从NetBeans中启动Maven创建。
NetBeans根据Maven的pom.xml自动执行依赖关系管理。
NetBeans从其工作空间解析Maven依赖关系,而无需安装到本地Maven存储库(需要依赖项目位于同一工作区中)。
NetBeans自动下载需要远程Maven存储库的依赖关系和源。
NetBeans提供了创建新的Maven项目pom.xml的向导
NetBeans提供了一个Maven Repository浏览器,使您可以查看本地存储库和注册的外部Maven存储库。
以下示例将帮助您充分利用集成NetBeans和Maven的优势。
打开NetBeans
选择文件菜单>打开项目 选项。
选择项目位置,使用Maven创建一个项目。我们创建了一个Java Project consumerBanking.See Maven创建项目,以了解如何使用Maven创建一个项目。
现在,您可以在NetBeans中看到maven项目。查看consumerBanking项目库和测试库。您可以看到NetBeans已将Maven依赖项添加到其创建路径。
现在,它使用NetBeans的maven功能创建此项目。
右键单击consumerBanking项目以打开上下文菜单。
选择清洁和创建作为选项
Maven将开始建设项目。您可以在NetBeans控制台中看到输出
NetBeans: Executing "mvn.bat -Dnetbeans.execution=true clean install" NetBeans: JAVA_HOME=C:Program FilesJavajdk1.6.0_21 Scanning for projects... ------------------------------------------------------------------------ Building consumerBanking task-segment: [clean, install] ------------------------------------------------------------------------ [clean:clean] [resources:resources] [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! skip non existing resourceDirectory C:MVNconsumerBankingsrcmain esources [compiler:compile] Compiling 2 source files to C:MVNconsumerBanking argetclasses [resources:testResources] [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! skip non existing resourceDirectory C:MVNconsumerBankingsrc est esources [compiler:testCompile] Compiling 1 source file to C:MVNconsumerBanking arget est-classes [surefire:test] Surefire report directory: C:MVNconsumerBanking argetsurefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.companyname.bank.AppTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.023 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [jar:jar] Building jar: C:MVNconsumerBanking argetconsumerBanking-1.0-SNAPSHOT.jar [install:install] Installing C:MVNconsumerBanking argetconsumerBanking-1.0-SNAPSHOT.jar to C:UsersGB3824.m2 epositorycomcompanynameankconsumerBanking 1.0-SNAPSHOTconsumerBanking-1.0-SNAPSHOT.jar ------------------------------------------------------------------------ BUILD SUCCESSFUL ------------------------------------------------------------------------ Total time: 9 seconds Finished at: Thu Jul 19 12:57:28 IST 2012 Final Memory: 16M/85M ------------------------------------------------------------------------
现在,右键单击App.java。选择运行文件为选项。您将在NetBeans控制台中看到结果。
NetBeans: Executing "mvn.bat -Dexec.classpathScope=runtime -Dexec.args=-classpath %classpath com.companyname.bank.App -Dexec.executable=C:Program FilesJavajdk1.6.0_21injava.exe -Dnetbeans.execution=true process-classes org.codehaus.mojo:exec-maven-plugin:1.1.1:exec" NetBeans: JAVA_HOME=C:Program FilesJavajdk1.6.0_21 Scanning for projects... ------------------------------------------------------------------------ Building consumerBanking task-segment: [process-classes, org.codehaus.mojo:exec-maven-plugin:1.1.1:exec] ------------------------------------------------------------------------ [resources:resources] [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! skip non existing resourceDirectory C:MVNconsumerBankingsrcmain esources [compiler:compile] Nothing to compile - all classes are up to date [exec:exec] Hello World! ------------------------------------------------------------------------ BUILD SUCCESSFUL ------------------------------------------------------------------------ Total time: 1 second Finished at: Thu Jul 19 14:18:13 IST 2012 Final Memory: 7M/64M ------------------------------------------------------------------------
IntelliJ IDEA对Maven有内置支持。在这个例子中,我们使用了IntelliJ IDEA社区版本11.1。
IntelliJ IDEA的一些功能如下所列
您可以从IntelliJ IDEA运行Maven目标。
您可以使用自己的控制台查看IntelliJ IDEA内的Maven命令的输出。
您可以在IDE中更新maven依赖项。
您可以从IntelliJ IDEA中启动Maven创建。
IntelliJ IDEA根据Maven的pom.xml自动执行依赖关系管理。
IntelliJ IDEA从其工作空间中解析Maven依赖关系,而无需安装到本地Maven存储库(需要依赖项目位于同一工作区)。
IntelliJ IDEA自动下载远程Maven存储库所需的依赖关系和源。
IntelliJ IDEA提供了创建新的Maven项目pom.xml的向导
以下示例将帮助您充分利用集成IntelliJ IDEA和Maven的优势。
我们将使用新建项目向导导入Maven项目。
打开IntelliJ IDEA。
选择文件菜单>新建项目选项。
从现有模型中选择导入项目。
选择Maven选项
选择项目位置,使用Maven创建一个项目。我们创建了一个Java Project consumerBanking.See Maven创建项目,以了解如何使用Maven创建一个项目。
选择要导入的Maven项目。
输入项目的名称,然后单击完成。
现在,您可以在IntelliJ IDEA中看到maven项目。查看consumerBanking项目外部库。您可以看到IntelliJ IDEA已将Maven依赖项添加到Maven部分下的创建路径。
现在,它使用IntelliJ IDEA的能力创建这个项目的时间。
选择consumerBanking项目。
选择Buid菜单>重建项目选项
您可以在IntelliJ IDEA控制台中看到输出
4:01:56 PM Compilation completed successfully
选择consumerBanking项目。
右键单击App.java以打开上下文菜单。
选择运行App.main()
您将在IntelliJ IDEA控制台中看到结果。
"C:Program FilesJavajdk1.6.0_21injava" -Didea.launcher.port=7533 "-Didea.launcher.bin.path= C:Program FilesJetBrainsIntelliJ IDEA Community Edition 11.1.2in" -Dfile.encoding=UTF-8 -classpath "C:Program FilesJavajdk1.6.0_21jrelibcharsets.jar; C:Program FilesJavajdk1.6.0_21jrelibdeploy.jar; C:Program FilesJavajdk1.6.0_21jrelibjavaws.jar; C:Program FilesJavajdk1.6.0_21jrelibjce.jar; C:Program FilesJavajdk1.6.0_21jrelibjsse.jar; C:Program FilesJavajdk1.6.0_21jrelibmanagement-agent.jar; C:Program FilesJavajdk1.6.0_21jrelibplugin.jar; C:Program FilesJavajdk1.6.0_21jrelib esources.jar; C:Program FilesJavajdk1.6.0_21jrelib t.jar; C:Program FilesJavajdk1.6.0_21jrelibextdnsns.jar; C:Program FilesJavajdk1.6.0_21jrelibextlocaledata.jar; C:Program FilesJavajdk1.6.0_21jrelibextsunjce_provider.jar; C:Program FilesJavajdk1.6.0_21jrelibextsunmscapi.jar; C:Program FilesJavajdk1.6.0_21jrelibextsunpkcs11.jar C:MVNconsumerBanking argetclasses; C:Program FilesJetBrains IntelliJ IDEA Community Edition 11.1.2libidea_rt.jar" com.intellij.rt.execution.application.AppMain com.companyname.bank.App Hello World! Process finished with exit code 0