- 浏览: 236937 次
文章分类
最新评论
-
sunyukun8888:
多谢啦!
重新整理后的Oracle OAF学习笔记——离线版本 -
singlespider:
很不错啊,谢楼主
重新整理后的Oracle OAF学习笔记——离线版本 -
000fuli:
000fuli 写道请问各位学长:你们可以下载吗?能下载的烦请 ...
重新整理后的Oracle OAF学习笔记——离线版本 -
000fuli:
请问各位学长:你们可以下载吗?能下载的烦请发一份到fuli.w ...
重新整理后的Oracle OAF学习笔记——离线版本 -
goodscript:
确实是不错的好文章!
重新整理后的Oracle OAF学习笔记——离线版本
开始之前
阅读笔记时请参阅原书英文版
开始
准备使用Maven
Maven默认读取<user_home>/.m2/settings.xml,通过proxy段的配置 设置代理信息。通过mirror段设置镜像服务器。这两个配置在M2_HOME/conf/settings.xml中都有范例。将M2_HOME /bin添加到环境变量。运行
mvn -version
查看使用的Maven版本信息。
找到的相关资料
配置环境变量M2_HOME为Maven2的安装目录,这样即使是在使用maven-ant-tasks时也读取M2_HOME/conf/settings.xml。
在mirrors段添加镜像配置,当前比较快的国内镜像是:
<mirror> <id>redv.com</id> <url>http://mirrors.redv.com/maven2</url> <mirrorOf>central</mirrorOf> <!-- Shanghai, China --> </mirror>
创建第一个Maven工程
使用Maven的 Archetype 机制创建第一个工程。Archetype被定义为原始的模式或模型,从它可以生成同一类型的东西。在Maven中,Archetype是工程的模板,它与用户输入的一些信息组合起来生成一个全功能的Maven工程。
创建工程
mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app
将创建一个my-app目录,目录中包含了一个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.mycompany.app</groupId> <artifactId>mvn-app</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>mvn-app</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> </project>
src目录包含了构建、测试、创建文档、部署工程所需的输入信息。
编译应用程序源码
进入<my-app>目录,执行:
mvn compile
将编译源码。Maven遵循“约定优于配置”的原则,这是Maven的第一个原则。默认情况下,源码放在src/main/java中。这个默认值并不会 出现在POM文件中,实际上,它是从父级(根级)POM继承过来的。编译后的classes保存目录也是同样的方式处理的,默认它放在 target/classes目录下。
是什么编译了应用程序源码?这是Maven的第二个原则“重用构建逻辑”。默认配置中配置了标准编译插件,它用于编译应用程序源码。同样的编译逻辑可以重用于其它的工程中。
上面了解了Maven如何找到应用程序源码,Maven怎样来编译应用源码,怎样调用编译插件。接下来的问题是,Maven如何能获取编译器插件? 在Maven的标准安装中,找不到编译插件,因为它不是与Maven发布版一起发布的。Maven将在需要插件时自动下载插件。
当第一次执行编译命令(或其它任何命令),Mave将下载这个命令需要的插件及其依赖的其它插件。下次再执行同样的命令时,Maven将不再下载它,命令执行将快很多。
编译测试源码执行单元测试
mvn test
将进行单元测试。这时Maven将下载更多需要的插件。在执行单元测试前,Maven将编译主代码。
mvn test-compile
编译测试代码。但是当执行mvn test时总是会先执行compile和test-compile。
打包并安装到本地仓库
生成jar包执行
mvn package
查看工程的POM文件可以看到packaging元素被设置为jar。Maven通过这个设置了解到需要生成一个JAR文件。
安装到本地仓库
mvn install
可以通过修改settings.xml的localRepository设置仓库的位置。
注意:Surefire插件(它执行test)将按特定的命名约定查看测试代码。默认情况下,下面的测试将被包含:
**/*Test.java **/Test*.java **/*TestCase.java
下面的将不被包含:
**Abstract*Test.java **/Abstract*TestCase.java
Maven的重用构建逻辑使得即使是使用默认的POM文件也可以执行大量基础构建操作,例如:
mvn site
可以为工程生成一个简单网站。
mvn clean
将清除target目录下旧的构建数据。
mvn idea:idea
可以产生一个IDEA工程。
mvn eclipse:eclipse
生成一个eclipse工程。
处理Classpath资源
src/main/resources是Maven推荐的保存资源文件的目录。可以将需要打包到JAR文件的资源放到这个目录。Maven使用的规则是所有放在src/main/resources目录下的文件和目录都将打包到JAR中。
默认生成的JAR文件中包含了META-INF目录。在这个目录下可以找到MANIFEST.MF和pom.xml和 pom.properties。你可以创建自己的mainfest文件,如果不创建Maven将自动生成一个。也可以包含自己的资源文件,例如在 src/main/resources目录下添加一个application.properties文件,重新打包则资源文件也将也现在JAR包中。
pom.xml和pom.properties文件被打包到JAR以便由Maven的每个artifact生成的JAR包都是自描述的,并且允许你 包含自己的应用中的原数据。最简单的应用可能就是用于获取应用的版本号。操作POM文件需要使用Maven的工具,但是propertiest文件却可以 使用标准Java API。
处理测试用Classpath的资源
添加资源到单元测试classpath,可以将资源添加到src/test/resources目录。在单元测试中,使用下面的代码片段在测试阶段访问资源:
// Retrieve resource InputStream is = getClass().getResourceAsStream( "/test.properties" ); // Do something with the resource
可以使用下面的配置覆盖maven-jar-plugin的默认配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifestFile>META-INF/MANIFEST.MF</manifestFile> </archive> </configuration> </plugin>
过滤Classpath资源
有时资源文件中包含的一些值在构建时才能提供。Maven中可以使用资源过滤,动态的将资源属性值设置到资源文件中。 将资源文件中的属性值设置为${<property name>},这个属性可以是pom.xml或用户的settings.xml中定义的属性,或定义在外部properties文件,或都是系统属 性。
需要将pom.xml中将需要进行过滤处理的资源目录的filtering属性设置为true。例:
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>Maven Quick Start Archetype</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> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build> </project>
使用资源过滤的举例:创建src/main/resources/META-INF/application.properties,内容设置为:
# application.properties application.name=${project.name} application.version=${project.version}
执行
mvn process-resources
target/classes目录下的application.properties文件内容将变为:
# application.properties application.name=Maven Quick Start Archetype application.version=1.0-SNAPSHOT
如果需要引用外部propertiest文件中的属性值,需要在pom.xml中添加对外部文件的引用。例如,创建一个外部资源文件src/main/filters/filter.properties:
# filter.properties my.filter.value=hello!
将对它的引用添加到pom.xml中:
<build> <filters> <filter>src/main/filters/filter.properties</filter> </filters> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build>
然后在application.propertiest文件中引用对应的属性:
# application.properties application.name=${project.name} application.version=${project.version} message=${my.filter.value}
再次执行mvn process-resources命令时会将message替换为外部文件中my.filter.value属性对应的值。
也可以在pom文件的properties段定义这些属性值。例如:
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>Maven Quick Start Archetype</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> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build> <properties> <my.filter.value>hello</my.filter.value> </properties> </project>
资源过滤也可以获取系统属性,也可以是编译到Java中的(java.version或user.home),或使用Java -D参数在命令行指定的属性。例如将application.propertiest文件设置为:
# application.properties java.version=${java.version} command.line.prop=${command.line.prop}
然后执行下面的命令:
mvn process-resources "-Dcommand.line.prop=hello again"
防止过滤二进制资源
某些情况下我们不希望属性过滤处理某些资源文件。比如图像文件。
比如src/main/resources/images不希望被过滤,这时应该排除这些资源。pom.xml设置如下:
<project> [...] <build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <excludes> <exclude>images/**</exclude> </excludes> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>images/**</include> </includes> </resource> </resources> </build> [...] </project>
使用Maven插件
配置Maven插件的参数。
例如,指定Java编译器只允许编译JDK 5.0的源码。可以在POM中添加设置:
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.0</version> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> </plugins> </build> [...] </project>
Maven 2的插件和工程的依赖很相似,在某种程度上它们确实如此。如果在本地找不到插件,则将自动下载插件,这更是与依赖关系的处理相同。插件与依赖同相样有groupId和version元素,但多数情况下这些元素不需要。
如果不指定groupId,则Maven将搜索org.apache.maven.plugins或org.codehause.mojo这两个groupId。你也可以在POM或settings.xml中指定goupId。
如果不指定版本Maven将尝试获取指定插件的最新版本。
通过mvn help:describe命令可以找到插件可选配置项。例如:
mvn help:describe -DgroupId=org.apache.maven.plugins \ -DartifactId=maven-compiler-plugin -Dfull=true
也可以在 http://maven.apache.org/plugins/ 使用Maven Plugin Reference找到相关插件的配置信息。
发表评论
-
用clojure编写rest风格的xml服务
2012-07-02 21:37 2249一、准备 目标:为报表服务开发一个REST ... -
scala中泛型类型中的一元操作符
2012-04-13 16:19 1304Scala 中泛型定义中一元符号总可以进行如下的转换: ... -
scala中的this.type
2012-03-29 10:06 3089自从开始看scala的Parser ... -
ibatis2.3.4 + h2 1.3.146数据不能保存的问题
2011-01-13 16:51 1329一个简单的测试用例中ibatis2.3.4 + h2 1.3. ... -
无意中发现ibatis中ResultMap也处理了无setter的private字段
2011-01-13 12:57 1578在用scala写的ibatis程序中使用case类作映射对象的 ... -
NetBeans 6.7发布了!
2009-06-29 22:37 1208刚刚看了下NetBeans官网,貌似6.7正式版发布了! ... -
Better Builds With Maven 学习笔记(使用Maven创建应用 )
2008-10-03 14:20 1763使用Maven创建应用 介绍 将要创建的应用名叫Profic ... -
JBPM 与 Spring 结合
2008-05-14 16:56 2169今天尝试了将jbpm和spring进行结合,主要参考http: ... -
JTA数据源配置
2007-01-09 13:02 1431.在J2EE容器中,直接在服务器上配置XA数据源,并使用全局 ... -
为WebWork simple theme 添加客户端校验功能!
2006-12-25 15:48 3186默认情况下,要使用WebWork的客户端校验需要使用x ... -
H event
2006-12-12 09:26 59在Hibernate一对多和多对多关联关系中在删除一个持久层对 ... -
Hibernate一对多、多对多关系级联删除时,二级缓存该如何处理?
2006-12-09 13:15 4235在我的应用中菜单(Menu)这个持久化对象是组织成树形结构的, ... -
XFire1.1-all.jar有内存泄漏
2006-11-09 08:48 3420困扰多日的WebService客户端应用的内存泄漏的问题终于解 ... -
博客开张:用Spring+ActiveMQ+Jencks开发消息驱动POJO
2006-10-29 14:48 9372我近段的一个应用中需要消息驱动POJO。 最近也听说Sprin ...
相关推荐
《Better Builds With Maven》是一本针对Maven 2.0的实用指南,由Maven核心团队成员John Casey、Vincent Massol、Brett Porter、Carlos Sanchez以及Jason Van Zyl共同撰写。本书深入浅出地介绍了如何利用Maven 2.0来...
《Better Builds With Maven2》是一本专注于Maven2构建工具的...通过学习《Better Builds With Maven2》和实践提供的源代码,开发者可以熟练掌握Maven2的使用,从而提高开发效率,确保项目的构建过程更加稳定和高效。
本资源"Better builds with Maven2"旨在深入探讨Maven2的使用,帮助开发者提高构建效率,优化项目流程。 首先,Maven2的核心概念是基于项目对象模型(Project Object Model,POM)。POM是一个XML文件,包含了项目的...
通过阅读《Better Builds with Maven》这本书,你可以学习到如何设置Maven环境,编写POM文件,理解生命周期和构建目标,以及如何有效地利用Maven解决项目中的各种问题。此外,书中还可能涵盖了一些高级主题,如...
通过学习《BetterBuildsWithMaven》,初学者不仅能了解 Maven 的基本操作,还能深入理解 Maven 如何简化软件项目的构建和管理,提高开发效率。同时,书中可能还涉及到了 Maven 的最佳实践、问题排查以及与其他工具...
《Better Builds with Maven》这本书是由Maven的核心开发团队成员John Casey、Vincent Massol、Brett Porter、Carlos Sanchez和Jason van Zyl共同编写的,旨在帮助读者更好地理解和使用Maven2。 #### 二、Maven2的...
总结,"Better builds with Maven2源代码"提供了深入学习Maven2的机会,通过对源代码的研究,开发者可以提升对Maven2的理解,从而更高效地管理和构建项目。通过掌握Maven2的精髓,我们可以创建出更加稳定、可维护的...
《Better Builds with Maven》是一本针对Maven 2.0的实用指南,由John Casey、Vincent Massol、Brett Porter、Carlos Sanchez和Jason van Zyl等经验丰富的开发者共同编写。本书旨在帮助开发人员更好地理解和掌握...
### Maven 2:实现更优构建的全面指南 #### Maven概览 Maven是一个软件项目管理工具,由Apache ...随着Maven 2的广泛应用,越来越多的开发者开始意识到其带来的价值,它已经成为现代软件开发不可或缺的一部分。
这本书是Maven的另一经典之作,英文原版为“Better Builds with Maven”。作者详细阐述了如何使用Maven提高软件构建的质量和效率,强调了Maven在自动化测试、持续集成和项目治理中的作用。书中的案例和实践建议对...
提供的文件 `betterbuildswithmaven-2008.pdf` 可能是一本关于 Maven2 的指南,它可能详细介绍了如何使用 Maven 提升构建效率,包括最佳实践、高级配置和插件的使用方法。这本书可能会涵盖如何解决依赖冲突、优化...
**正文** 《Maven2教程,适合所有人看的》 Maven2,作为一个强大的Java项目管理工具,它的出现极大地简化了构建、管理和部署Java应用程序的...现在,打开《Better builds with Maven2.pdf》,开始你的Maven之旅吧!
- Better Builds with Maven:一本免费电子书,提供更深入的Maven使用指南。 2. Maven与Ant的区别: - Maven采用声明式配置,避免了Ant中的复杂脚本编写。 - Maven提供了一种标准的构建生命周期,包括清理、编译...