- 浏览: 3506440 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wanglf1207:
EJB的确是个不错的产品,只是因为用起来有点门槛,招来太多人吐 ...
weblogic-ejb-jar.xml的元素解析 -
qwfys200:
总结的不错。
Spring Web Flow 2.0 入门 -
u011577913:
u011577913 写道也能给我发一份翻译文档? 邮件437 ...
Hazelcast 参考文档-4 -
u011577913:
也能给我发一份翻译文档?
Hazelcast 参考文档-4 -
songzj001:
DbUnit入门实战
1.前言
Maven,发音是[`meivin],"专家"的意思。它是一个很好的项目管理工具,很早就进入了我的必备工具行列,但是这次为了把project1项 目完全迁移并应用maven,所以对maven进行了一些深入的学习。写这个学习笔记的目的,一个是为了自己备忘,二则希望能够为其他人学习使用 maven 缩短一些时间。
2. maven概要
首先我把maven的概念快速的梳理一下,让我们快速地建立起一个比较精确的maven应用场景。
2.1 maven不是什么
读书时候要先限定范围,避免一些有害的遐想。要说maven不是什么,我们可以从如下几个要点来展开
- maven不是ant,也不是make。
我们以前接触的构建工具,需要写一些详细的步骤,比如: compile project1/src } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }4) 如果只想运行单个测试用例,能否实现?
可以,运行时候增加命令行参数 -Dtest=MyTest 即可,其中MyTest是所需要运行的单元测试用例名称,但是不需要包含package部分。
4.3 编译
1) 问:如何给插件指派参数?比如我要设置一些编译参数
答:以下内容设定编译器编译java1.5的代码
< project >
...
< build >
...
< plugins >
< plugin >
< artifactId > maven-compiler-plugin </ artifactId >
< configuration >
< source > 1.5 </ source >
< target > 1.5 </ target >
</ configuration >
</ plugin >
</ plugins >
...
</ build >
...
</ project >2) 问:我的目录是非标准的目录结构,如何设置让maven支持?
答:指定source目录和test-source目录即可。
< build >
< directory > target </ directory >
< sourceDirectory > src </ sourceDirectory >
< scriptSourceDirectory > js/scripts </ scriptSourceDirectory >
< testSourceDirectory > test </ testSourceDirectory >
< outputDirectory > bin </ outputDirectory >
< testOutputDirectory > bin </ testOutputDirectory >
</ build >3) 我源代码是UTF8格式的,我如何在maven中指定?
设置一个变量即可
< project >
...
< properties >
< project.build.sourceEncoding > UTF-8 </ project.build.sourceEncoding >
</ properties >
...
</ project >{code:xml} <build> ... <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <encoding>UTF-8</encoding> </configuration> </plugin> ... </build> {code}
. 问:我的项目除了main/java目录之外,还加了其他的c++目录,想要一并编译,如何做?
答:使用native插件,具体配置方法参考[http://mojo.codehaus.org/maven-native/native-maven-plugin/]{code:xml} <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>native-maven-plugin</artifactId> <extensions>true</extensions> <configuration> </plugin> {code}
. 问:我想要把工程的所有依赖的jar都一起打包,怎么办?
答:首先修改maven的配置文件,给maven-assembly-plugin增加一个jar-with-dependencies的描述。{code:xml} <project> [...] <build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin> </plugins> </build> [...] </project> {code}
mvn assembly:assembly
. 问:我想把main/scripts中的内容一起打包发布,如何做?
答:在pom中配置额外的资源目录。如果需要的话,还可以指定资源目录的输出位置{code:xml} <build> ... <resources> <resource> <filtering>true</filtering> <directory>src/main/command</directory> <includes> <include>run.bat</include> <include>run.sh</include> </includes> <targetPath>/abc</targetPath> </resource> <resource> <directory>src/main/scripts</directory> </resource> </resources> ... </build> {code}
. 问:我有多个源代码目录,但是maven只支持一个main src和一个test src,怎么办?
答:使用另外一个插件,并仿照如下配置pom{code:xml} <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>add-source</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>src/config/java</source> <source>src/main/java</source> <source>src/member/java</source> </sources> </configuration> </execution> </executions> </plugin> {code}
. 问:我的源代码目录中有一部分文件我不想让maven编译,怎么做?
答:使用一个maven插件,然后使用includes和excludes。同理,也可以处理资源的过滤。{code:xml} <build> <sourceDirectory>http://www.cnblogs.com/src/java</sourceDirectory> <plugins> <plugin> <groupId>com.sun.enterprise</groupId> <artifactId>hk2-maven-plugin</artifactId> <configuration> <includes> <include>com/sun/logging/LogDomains.*</include> <include>com/sun/enterprise/util/OS.java</include> <include>com/sun/enterprise/util/io/FileUtils.java</include> <include>com/sun/enterprise/util/zip*.properties</include> </includes> </resource> </resources> </build> {code}
. 问:我的项目是一个纯的html组成的项目,没有任何的java代码,怎么跳过编译过程?
答:配置如下{code:xml} <build> <sourceDirectory>src/java</sourceDirectory> <plugins> <plugin> <groupId>com.sun.enterprise</groupId> <artifactId>hk2-maven-plugin</artifactId> </plugin> </plugins> </build> {code}
. 问:我的工程里用hibernate,想在编译时候自动生成ddl,如何做?
答:添加插件hibernate3-maven-plugin
,按照如下配置:{code:xml} <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>hibernate3-maven-plugin</artifactId> <version>2.1</version> <configuration> <components> <component> <name>hbm2ddl</name> <implementation>annotationconfiguration</implementation> </component> </components> </configuration> <dependencies> <dependency> <groupId>hsqldb</groupId> <artifactId>hsqldb</artifactId> <version>${hsqldb.version}</version> </dependency> </dependencies> </plugin> {code}
. 问:我能用maven支持eclipse RCP项目吗?
答:当然可以,你可以使用插件 Tycho,详细内容可以参考这里[http://mattiasholmqvist.se/2010/02/building-with-tycho-part-1-osgi-bundles/ ].
<plugin> <groupid>org.sonatype.tycho</groupid> <artifactid>target-platform-configuration</artifactid> <version>0.7.0</version> <configuration> <resolver>p2</resolver> </configuration> </plugin> 另外,老牌的pde-maven-plugin就不要用了,已经好几年没见更新了。
4.4 ant互动
1) 如何在maven编译时候运行ant脚本?
使用专门的antrun插件,并且在target标签内部加入ant的代码
< plugin > < artifactId > maven-antrun-plugin</ artifactId > < version > 1.6</ version > < executions > < execution > < phase > <!-- 生命周期阶段 --> </ phase > < configuration > < target > <!-- 加入target内部的代码 --> </ target > </ configuration > < goals > < goal > run</ goal > </ goals > </ execution > </ executions > </ plugin >
2)如何在ant脚本中引用maven的classpath?
maven给每一个依赖都生成了一个属性,格式为"groupId:artifactId[:classifier]:type",比如,如果一下例子就显示依赖的org.apache.common-util的jar文件路径
< echo message ="Dependency JAR Path: ${org.apache:common-util:jar}" />
另外,maven还预定义了四个classpath的引用,他们是
- maven.compile.classpath
- maven.runtime.classpath
- maven.test.classpath
- maven.plugin.classpath
3)如何使用antrun插件运行外部的build文件?
很简单,直接在antrun里边使用ant指令即可,如下:
< plugin > < groupId > org.apache.maven.plugins</ groupId > < artifactId > maven-antrun-plugin</ artifactId > < version > 1.6</ version > < executions > < execution > < id > compile</ id > < phase > compile</ phase > < configuration > < target > <!-- 同时传递内置的classpath给外部ant文件 --> < property name ="compile_classpath" refid ="maven.compile.classpath" /> < property name ="runtime_classpath" refid ="maven.runtime.classpath" /> < property name ="test_classpath" refid ="maven.test.classpath" /> < property name ="plugin_classpath" refid ="maven.plugin.classpath" /> < ant antfile ="${basedir}/build.xml" > < target name ="test" /> </ ant > </ target > </ configuration > < goals > < goal > run</ goal > </ goals > </ execution > </ executions > </ plugin >
. 问:如何在ant中使用maven的功能?
答:使用ant的[maven task|http://maven.apache.org/ant-tasks/index.html],不过只有ant 1.6以上和jdk 1.5环境才支持。h4. 测试相关
. 问:如何忽略某个阶段的结果?比如单元测试不一定要全正确
答:给插件增加testFailureIgnore参数,并设置为false。如果要屏蔽该阶段,则用<skip>true</skip>
{code:xml} <project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <testFailureIgnore>true</testFailureIgnore> </configuration> </plugin> </plugins> </build> [...] </project> {code}
. 问:我如何在maven中加入PMD,CheckStyle,JDepend等检查功能?
答:加入PMD检查,以下代码如果在reporting
节点中加入则在mvn site
中执行,如果在build
节点中加入,则在build的时候自动运行检查。详细配置参考[pmd插件使用说明|http://maven.apache.org/plugins/maven-pmd-plugin/]{code:xml} <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-pmd-plugin</artifactId> <version>2.5</version> </plugin> </plugins> {code}
加入 checkstyle 检查,详细配置参考[checkstyle插件使用说明|http://maven.apache.org/plugins/maven- checkstyle-plugin/],同样注意放置在reporting和build节点中的区别(所有报表类插件都要同样注意):{code:xml} <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-plugin</artifactId> <version>2.5</version> </plugin> {code}
加入 simian 的支持,simian是一个支持代码相似度检查的工具,目前有maven插件,也有checkstyle的插件。它不仅可以检查java,甚至可以支持文 本文件的检查。详细帮助信息参考[这里|http://www.redhillconsulting.com.au/products/simian /]。simian 的 maven插件在[这里|http://mojo.codehaus.org/simian-report-maven-plugin /introduction.html]{code:xml} <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>simian-maven-plugin</artifactId> <version>1.6.1</version> </plugin> </plugins> ... </build> {code}
加入 jdepend 检查,详细配置参考[jdepend使用说明|http://mojo.codehaus.org/jdepend-maven-plugin/],{code:xml} <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jdepend-maven-plugin</artifactId> <version>2.0-beta-2</version> </plugin> {code}
加入 findbugz 检查,详细配置参考[findbugz使用说明|http://mojo.codehaus.org/findbugs-maven-plugin/usage.html],{code:xml} <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>findbugs-maven-plugin</artifactId> <version>2.0.1</version> </plugin> {code}
加入javadoc生成,详细配置参考[javadoc usage|http://maven.apache.org/plugins/maven-javadoc-plugin/usage.html]{code:xml} <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.7</version> <configuration> ... </configuration> </plugin> {code}
加入 jxr 支持,JXR是一个生成java代码交叉引用和源代码的html格式的工具,详细配置信息参考[jxr usage|http://maven.apache.org/plugins/maven-jxr-plugin/]。注意,jxr没有必要在build阶段运行。{code:xml} <reporting> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jxr-plugin</artifactId> <version>2.1</version> </plugin> </plugins> </reporting> {code}
加入 Cobertura 支持,它是一个代码覆盖率工具,可以用来评估具有相应测试的源代码的比率。详细帮助在[这里|http://mojo.codehaus.org /cobertura-maven-plugin/index.html]。另外一个功能相似的软件是[EMMA|http: //emma.sourceforge.net/samples.html],详细的帮助在[这里|http://mojo.codehaus.org /emma-maven-plugin/usage.html]。两个产品的比较文章在[这里|http://www.topcoder.com /tc?module=Static&d1=features&d2=030107],个人倾向于都要用,因为给出的指标不一样,都有参 考作用。{code:xml|title=Cobertura } <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId> <version>2.4</version> <configuration> <check> <branchRate>85</branchRate> <lineRate>85</lineRate> <haltOnFailure>true</haltOnFailure> <totalBranchRate>85</totalBranchRate> <totalLineRate>85</totalLineRate> <packageLineRate>85</packageLineRate> <packageBranchRate>85</packageBranchRate> <regexes> <regex> <pattern>com.example.reallyimportant.*</pattern> <branchRate>90</branchRate> <lineRate>80</lineRate> </regex> <regex> <pattern>com.example.boringcode.*</pattern> <branchRate>40</branchRate> <lineRate>30</lineRate> </regex> </regexes> </check> </configuration> <executions> <execution> <goals> <goal>clean</goal> <goal>check</goal> </goals> </execution> </executions> </plugin> {code}
{code:xml|title=EMMA} <reporting> ... <plugins> ... <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>emma-maven-plugin</artifactId> <version>1.0-alpha-3-SNAPSHOT</version> </plugin> ... </plugins> ... </reporting> {code}
添加 javaNCSS 插件,它是一个java代码的度量工具,详细参考在[这里|http://mojo.codehaus.org/javancss-maven-plugin/]。{code:xml} <reporting> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>javancss-maven-plugin</artifactId> <version>2.0-beta-2</version> </plugin> </plugins> </reporting> {code}
h4. profile相关. 问:profile能够设置为某个变量不存在的条件下激活?
答:使用!前缀,请看示例:{code:xml} <activation> <property> <name>!environment.type</name> </property> </activation> {code}
h4. 部署相关. 问:其他部署到服务器的方式和配置怎么配?
答:本文摘自 [http://blog.csdn.net/zyxnetxz/archive/2009/05/18/4199348.aspx]{panel} *Distribution Management* 用于配置分发管理,配置相应的产品发布信息,主要用于发布,在执行mvn deploy后表示要发布的位置 *# 配置到文件系统{code:xml} <distributionManagement> <repository> <id>proficio-repository<id> <name>Proficio Repository<name> <url>file://${basedir}/target/deploy<url> <repository> <distributionManagement> {code}
*# 使用ssh2配置{code:xml} <distributionManagement> <repository> <id>proficio-repository<id> <name>Proficio Repository<name> <url>scp://sshserver.yourcompany.com/deploy<url> <repository> <distributionManagement> {code}
*# 使用sftp配置{code:xml} <distributionManagement> <repository> <id>proficio-repositoryi<d> <name>Proficio Repository<name> <url>sftp://ftpserver.yourcompany.com/deploy<url> <repository> <distributionManagement> {code}
*# 使用外在的ssh配置编译扩展用于指定使用wagon外在ssh提供,用于提供你的文件到相应的远程服务器。{code:xml} <distributionManagement> <repository> <id>proficio-repository<id> <name>Proficio Repository<name> <url>scpexe://sshserver.yourcompany.com/deploy<url> <repository> <distributionManagement> <build> <extensions> <extension> <groupId>org.apache.maven.wagon<groupId> <artifactId>wagon-ssh-external<artifactId> <version>1.0-alpha-6<version> <extension> <extensions> <build> {code}
*# 使用ftp配置{code:xml} <distributionManagement> <repository> <id>proficio-repository<id> <name>Proficio Repository<name> <url>ftp://ftpserver.yourcompany.com/deploy<url> <repository> <distributionManagement> <build> <extensions> <extension> <groupId>org.apache.maven.wagongroupId> <artifactId>wagon-ftpartifactId> <version>1.0-alpha-6version> <extension> <extensions> <build> {code}
{panel} h4. 插件配置. 问:我用maven输出site,如何设置输出为utf8编码?
答: 配置site插件的编码设置{code:xml} ... <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-site-plugin</artifactId> <version>2.0-beta-6</version> <configuration> <outputEncoding>UTF-8</outputEncoding> </configuration> </plugin> ... {code}
发表评论
-
js压缩工具(转载)
2012-06-07 11:58 9543怎么压缩Js?为什么要压缩Javascript? Javasc ... -
Eclipse Indigo - Cannot install Android ADT Plugin
2012-02-29 01:17 3888When I try to install the And ... -
Eclipse Indigo - Cannot install Android ADT Plugin
2012-02-29 01:13 1994When I try to install the And ... -
使用iconv进行内码转换(Big5->GB2312)
2012-02-26 00:56 3520i conv 是一个通过unicode 作为中间码 ... -
Enterprise Architect's Code Template Syntax
2011-12-13 22:58 2020Code Templates are written as ... -
Enterprise Architect's Engineering Code Template Framework Code Templates
2011-12-13 22:57 1787The Code Template Framework c ... -
ActiveX控件在签名以后,仍然被IE浏览器默认安全级阻止而无法安装。
2011-11-18 08:56 5442使用代码签名证书签名后的控件在运行时报“Internet ... -
关于IObjectSafety和ActiveX组件的脚本安全
2011-11-17 19:19 3121都说ActiveX 危险,那么 ... -
在此页上的 ActiveX 控件和本页上的其它部份的交互可能不安全。你想允许这种交互
2011-11-17 19:09 14843如果采用VC++开发的ActiveX,那么第一次运行的时候,I ... -
如何编写 INF 文件
2011-11-16 14:31 2187INF文件全称Information File文件,是Wino ... -
如何在web上实现对另一个应用程序的键盘输入,就像vb中的sendkey
2011-11-16 10:49 3545用 set WshShell = CreateOb ... -
SWOT分析模型
2011-10-20 08:50 2335SWOT分析模型(SWOT Analysis) SWO ... -
MINGW GCC 4.3.0 安装与配置(解决CREATEPROCESS问题)
2011-07-28 23:53 4711首先,下载Mingw TDM 4.3.0版本http:// ... -
时间盒策略--让你必胜的15种秘诀
2011-04-26 23:34 2333简单地说,时间盒是我 ... -
猎人和猎狗的故事
2011-03-07 09:28 2372有一天,猎人带着一 ... -
项目进度计划管理中五种时间
2011-03-03 00:15 2388在大多数复杂的建设项目进度计划管理中,一般都记录五种时间 ... -
PSP个人软件过程
2011-02-05 00:57 4300个人软件过程(Personal Software ... -
eclipse和UML工具EA的连接方法
2010-06-24 19:15 7432选择了好久UML工具,在rose、eclipseUML、EA等 ... -
领导者需要警惕的六大日常决策陷阱
2010-06-09 14:39 2099决策是每个经理人最重 ... -
净室软件工程及发展
2010-05-16 22:23 1763净室软件工程及发展 本文转载自软件工程专 ...
相关推荐
以上就是针对Maven常见问题的一些解答,涵盖了项目导入、依赖解析、构建错误等多个方面。通过这些解决方案,开发者应该能够解决在使用Maven过程中遇到的大部分问题。不过,需要注意的是,Maven的配置可能会因环境和...
### Maven常见问题问答知识点 #### 1. Maven简介与应用场景 - **概念梳理**:Maven是一个项目管理和理解工具,其设计目标在于帮助开发者更好地管理Java项目。它通过一系列的预设规则和流程,简化了项目的构建过程...
ant学习指导文档 maven配置 maven常见问题问答 对于初学或想深入了解maven的童鞋以指导
关于"Maven常见问题"的解答: 1. **中奖短信回复错误**: 如果你在收到中奖短信后回复出现错误,应该在规定时间内联系大众点评的客服解决,超过有效期可能无法处理。 2. **更换中奖活动门店**: 中奖活动的门店...
本教程将详细介绍如何使用Maven来整合这三个框架,以及解决在这个过程中可能遇到的常见问题。 首先,Maven是一个项目管理和综合工具,它通过一个配置文件(pom.xml)管理项目的依赖关系,简化了构建过程。在创建...
本文将针对一些常见的问题进行详细的解答,并提供相应的解决方案,帮助大家顺利搭建Maven项目。 #### 一、问题1: Cannot change version of project facet DynamicWebModule to 3.0. **问题描述**: 在配置或更新...
这个文档可能包含了关于Maven3.3.9的使用技巧、常见问题解答或特定构建场景的配置示例,可以帮助用户更好地理解和使用Maven。可能包括如何自定义Maven的构建过程、如何处理复杂的依赖关系、如何配置插件等实用内容。...
`说明.htm`可能是Maven 3.9.6的快速使用指南,涵盖了安装、配置、基本命令和常见问题解答等内容。通过阅读这个文件,初学者可以快速上手Maven,掌握基本的构建流程。 总结,Apache Maven 3.9.6作为一款强大的项目...
- 提供了丰富的文档资料,包括用户手册、常见问题解答等。 7. **插件列表:** - [Maven 插件列表](http://maven.apache.org/plugins/index.html) - Maven 支持大量的插件来扩展其功能,这里列出了所有可用的插件...
通过官网,开发者可以了解Maven的最新动态,获取详细的用户指南、开发者文档以及常见问题解答。 “apache-maven-3.6.0”目录包含了Maven 3.6.0的完整安装包,其中包含各种库文件、脚本、配置文件以及可执行文件,...
README.txt文件通常会提供一些基本的安装和使用指南,可能包括快速启动步骤、系统需求以及常见问题解答,对于初次接触Maven的用户来说非常有用。 “maven-peizhi”文件(如果这是一个文件名,可能是配置文件或者...
压缩包中的"笔记"和"资料"文件可能包含更深入的Maven教程、最佳实践、常见问题解答和案例研究等内容。学习这些资料有助于提升你在实际项目中的Maven应用能力,解决遇到的问题,并优化构建流程。 综上所述,Maven是...
README文件是项目的基本指南,它为用户提供快速入门信息、系统需求、安装步骤和常见问题解答。对于Maven 3.6.1,这个文件可能会包含如何配置和运行Maven的说明,以及关于新特性和改进的概述。 4. **启动目录(boot...
DataX 部署及常见问题解答 DataX 是一款由阿里巴巴开源的数据同步工具,支持多种数据源之间的数据同步。以下是 DataX 的部署及常见问题解答。 部署方法 DataX 提供了两种部署方式:直接下载 DataX 工具包和下载 ...
#### 常见问题解答 1. **`dependencies`与`dependencyManagement`的区别**: - `dependencies`:直接声明项目使用的依赖。 - `dependencyManagement`:提供依赖版本管理,用于统一项目及其子模块的依赖版本,提高...
- **常见问题**:解答了一些使用 Maven 过程中可能会遇到的问题。 #### 3. 资源 - **由 Maven 支持的项目**:列举了一些使用 Maven 开发的成功案例。 - **相关链接**: - **书籍和文章**:提供了一系列关于 Maven...
需要注意的是,虽然提供的压缩包文件名为`site`,这通常是指Maven项目的站点文档,但官方英文文档可能包含在该站点文档内,提供关于插件的详细使用方法、配置选项以及常见问题解答。在实际使用中,你应该参考这些...