Maven 标准目录结构
好的目录结构可以使开发人员更容易理解项目,为以后的维护工作也打下良好的基础。Maven2根据业界公认的最佳目录结构,为开发者提供了缺省的标准目录模板。Maven2的标准目录结构如下:src/main/java
Application/Library sources
src/main/resources
Application/Library resources
src/main/filters
Resource filter files
src/main/assembly
Assembly descriptors
src/main/config
Configuration files
src/main/scripts
Application/Library scripts
src/main/webapp
Web application sources
src/test/java
Test sources
src/test/resources
Test resources
src/test/filters
Test resource filter files
src/site
Site
LICENSE.txt
Project's license
NOTICE.txt
Notices and attributions required by libraries that the project depends on
README.txt
Project's readme
使用目录模板,可以使 pom.xml 更简洁。因为 Maven2 已经根据缺省目录,预定义了相关的动作,而无需人工的干预。以 resources 目录为例:
[*]src/main/resources,负责管理项目主体的资源。在使用Maven2执行compile之后,这个目录中的所有文件及子目录,会复制到target/classes目录中,为以后的打包提供了方便。
[*]src/test/resources,负责管理项目测试的资源。在使用Maven2执行test-compile之后,这个目录中的所有文件及子目录,会复制到target/test-classes目录中,为后续的测试做好了准备。
这些动作在 Maven1 中,是需要在 maven.xml 中使用<preGoal>或<postGoal>来完成的。如今,完全不需要在pom.xml中指定就能够自动完成。在src和test都使用resources,方便构建和测试,这种方式本就已是前人的经验。通过使用Maven2,使这个经验在开发团队中得到普及。
创建标准目录模板,可以通过如下命令:
mvn archetype:create -DgroupId=com.codeline.commons -DartifactId=codelineCommons
groupId和artifactId的含义与Maven1中的含义一样,参数artifactId的值会作为项目根目录的名字。除了建立相应的目录之外,Maven2还会创建缺省的pom.xml。
Maven2也考虑到:不同类型的项目需要拥有不同的目录结构。如创建web项目,可以使用命令:
mvn archetype:create -DgroupId=com.mycompany.app
-DartifactId=my-webapp
-DarchetypeArtifactId=maven-archetype-webapp
Maven 生命周期
在Maven2中有了明确的生命周期概念,而且都提供与之对应的命令,使得项目构建更加清晰明了。主要的生命周期阶段:
[*]validate,验证工程是否正确,所有需要的资源是否可用。
[*]compile,编译项目的源代码。
[*]test-compile,编译项目测试代码。
[*]test,使用已编译的测试代码,测试已编译的源代码。
[*]package,已发布的格式,如jar,将已编译的源代码打包。
[*]integration-test,在集成测试可以运行的环境中处理和发布包。
[*]verify,运行任何检查,验证包是否有效且达到质量标准。
[*]install,把包安装在本地的repository中,可以被其他工程作为依赖来使用
[*]deploy,在整合或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
[*]generate-sources,产生应用需要的任何额外的源代码,如xdoclet。
如果要执行项目编译,那么直接输入:mvn compile即可,对于其他的阶段可以类推。阶段之间是存在依赖关系(dependency)的,如test依赖test-compile。在执行mvn test时,会先运行mvn test-compile,然后才是mvn test。
Maven 关键词
[*]Project:
[*]任何你想 build 的事物,Maven都会把它们当作是一个 Project。
[*]这些 Project 被定义为 POM(Project Object Model)。
[*]一个 Project 可以依赖其他的project,一个 project 也可以有多个子project组成。
[*]POM:
[*]POM(pom.xml) 是 Maven 的核心文件,它是指示 Maven 如何工作的元数据文件,类似 ant 的 build.xml 文件。
[*]pom.xml 文件应该位于每个 Project 的根目录。
[*]GroupId:
[*]顾名思义,这个应该是公司名或组织名。
[*]ArtifactId:
[*]构建出来的文件名,一般来说或,这个也是project名。
[*]Packaging:
[*]项目打包的类型,可以是将jar、war、rar、ear、pom,默认是jar。
[*]Version:
[*]项目的版本,项目的唯一标识由 groupId+artifactId+packaging+versionz 组成。
[*]Dependency:
[*]为了能够 build 或运行,一个典型的java project会依赖其他的包,在Maven中,这些被依赖的包就被称为 dependency。
[*]Plug-in:
[*]Maven是有插件组织的,它的每一个功能都是由插件提供的,主要的插件是由 java 来写的,但是他也支持 beanshell 和 ant 脚本编写的插件。
[*]Repository:
[*]仓库用来存放artifact的,可以是本地仓库,也可以是远程仓库,Maven是由一个默认的仓库
[*]Snapshot:
[*]工程中可以(也应该)有这样一个特殊的版本:这个版本可以告诉Maven,该工程正在处于开发阶段,会经常更新(但还为发布)。当其他工程依赖此类型的artifact时,Maven会在仓库中寻找该artifact的最新版本,并自动下载、使用该最新版本。
Maven 常见命令
mvn archetype:create
创建Maven项目
mvn compile
编译源代码
mvn test
运行应用程序中的单元测试
mvn install
在本地Respository中安装jar
mvn eclipse:eclipse
生成eclipse项目文件
mvn jetty:run
启动jetty服务
mvn clean
清除项目目录中的生成结果
mvn site
生成项目相关信息的网站
mvn package
根据项目生成的jar
Maven的默认生命周期
Default Lifecycle
生命周期阶段
描述
validate
验证
确保当前配置和 POM 的内容是有效的。这包含对 pom.xml 文件树的验证。
initialize
初始化
在执行构建生命周期的主任务之前可以进行初始化。
generate-sources
生成源码
代码生成器可以开始生成在以后阶段中处理或编译的源代码。
process-sources
处理源码
提供解析、修改和转换源码。常规源码和生成的源码都可以在这里处理。
generate-resources
生成资源
可以生成非源码资源。通常包括元数据文件和配置文件。
process-resources
处理资源
处理非源码资源。修改、转换和重定位资源都能在这阶段发生。
compile
编译
编译源码。编译过的类被放到目标目录树中。
process-classes
处理类
处理类文件转换和增强步骤。字节码交织器和常用工具常在这一阶段操作。
generate-test-sources
生成测试源码
mojo 可以生成要操作的单元测试代码。
process-test-sources
处理测试源码
在编译前对测试源码执行任何必要的处理。在这一阶段,可以修改、转换或复制源代码。
generate-test-resources
生成测试资源
允许生成与测试相关的(非源码)资源。
process-test-resources
处理测试资源
可以处理、转换和重新定位与测试相关的资源。
test-compile
测试编译
编译单元测试的源码。
process-test-classes
对测试编译生成的文件做后期处理(需Maven2.0.5及以上)
test
测试
运行编译过的单元测试并累计结果。
prepare-package
执行打包前的所有操作(需Maven2.1及以上)
package
打包
将可执行的二进制文件打包到一个分布式归档文件中,如 JAR 或 WAR。
pre-integration-test
前集成测试
准备集成测试。这种情况下的集成测试是指在一个受到一定控制的模拟的真
实部署环境中测试代码。这一步能将归档文件部署到一个服务器上执行。
integration-test
集成测试
执行真正的集成测试。
post-integration-test
后集成测试
解除集成测试准备。这一步涉及测试环境重置或重新初始化。
verify
检验
检验可部署归档的有效性和完整性。过了这个阶段,将安装该归档。
install
安装
将该归档添加到本地 Maven 目录。这一步让其他可能依赖该归档的模块可以使用它。
deploy
部署
将该归档添加到远程 Maven 目录。这一步让这个工件能为更多的人所用。
页:
[1]