maven常见问题问答(超全面) 【转】
1.前言
Maven,发音是[`meivin],"专家"的 意思。它是一个很好的项目管理工具,很早就进入了我的必备工具行列,但是这次为了把project1项目完全迁移并应用maven,所以对maven进行 了一些深入的学习。写这个学习笔记的目的,一个是为了自己备忘,二则希望能够为其他人学习使用maven 缩短一些时间。
2. maven概要首先我把maven的概念快速的梳理一下,让我们快速地建立起一个比较精确的maven应用场景。
2.1 maven不是什么读书时候要先限定范围,避免一些有害的遐想。要说maven不是什么,我们可以从如下几个要点来展开
maven将自己定位为一个项目管理工具。它负责管理项目开发过程中的几乎所有的东西:
maven把项目的构建划分为不同的生命周期(lifecycle),在我看来,划分的已经是非常仔细了,大家可以参考这里 。粗略一点的话,它这个过程(phase)包括:编译、测试、打包、集成测试、验证、部署。maven中所有的执行动作(goal)都需要指明自己在这个过程中的执行位置,然后maven执行的时候,就依照过程的发展依次调用这些goal进行各种处理。
这个也是maven的一个基本调度机制。一般来说,位置稍后的过程都会依赖于之前的过程。当然,maven同样提供了配置文件,可以依照用户要求,跳过某些阶段。
2.4 maven的"约定优于配置"所谓的"约定优于配置",在maven中并不是完全不可以修改的,他们只是一些配置的默认值而已。但是使用者除非必要,并不需要去修改那些约定内容。maven默认的文件存放结构如下:
/项目目录 pom.xml 用于maven的配置文件 /src 源代码目录 /src/main 工程源代码目录 /src/main/java 工程java源代码目录 /src/main/resource 工程的资源目录 /src/test 单元测试目录 /src/test/java /target 输出目录,所有的输出物都存放在这个目录下 /target/classes 编译之后的class文件每一个阶段的任务都知道怎么正确完成自己的工作,比如compile任务就知道从src/main/java下编译所有的java文件,并把它的输出class文件存放到target/classes中。
对maven来说,采用"约定优于配置"的策略可以减少修改配置的工作量,也可以降低学习成本,更重要的是,给项目引入了统一的规范。
2.5 maven的版本规范maven使用如下几个要素来唯一定位某一个输出物: groupId:artifactId:packaging:version 。比如 org.springframework:spring:2.5 。每个部分的解释如下:
groupIdmaven有自己的版本规范,一般是如下定义 <major version>.<minor version>.<incremental version>-<qualifier> ,比如1.2.3-beta-01。要说明的是,maven自己判断版本的算法是major,minor,incremental部分用数字比 较,qualifier部分用字符串比较,所以要小心 alpha-2和alpha-15的比较关系,最好用 alpha-02的格式。
maven在版本管理时候可以使用几个特殊的字符串 SNAPSHOT ,LATEST ,RELEASE 。比如"1.0-SNAPSHOT"。各个部分的含义和处理逻辑如下说明:
SNAPSHOTmaven把整个maven管理的项目分为几个部分,一个部分是源代码,包括源代码本身、相关的各种资源,一个部分则是单元测试用例,另外一部分则是各种maven的插件。对于这几个部分,maven可以独立管理他们,包括各种外部依赖关系。
2.7 maven的依赖管理依赖管理一般是最吸引人使用maven的功能特性了,这个特性让开发者只需要关注代码的直接依赖,比如我们用了spring,就加入spring依赖说明就可以了,至于spring自己还依赖哪些外部的东西,maven帮我们搞定。
任意一个外部依赖说明包含如下几个要素:groupId, artifactId, version, scope, type, optional。其中前3个是必须的,各自含义如下:
groupId 必须 artifactId 必须 version 必须。maven认为,程序对外部的依赖会随着程序的所处阶段和应用场景而变化,所以maven中的依赖关系有作用域(scope)的限制。在maven中,scope包含如下的取值:
compile(编译范围)另外,代码有代码自己的依赖,各个maven使用的插件也可以有自己的依赖关系。依赖也可以是可选的,比如我们代码中没有任何cache依赖,但是hibernate可能要配置cache,所以该cache的依赖就是可选的。
2.8 多项目管理maven的多项目管理也是非常强大的。一般来说,maven要求同一个工程的所有子项目都放置到同一个目录下,每一个子目录代表一个项目,比如
总项目/ pom.xml 总项目的pom配置文件 子项目1/ pom.xml 子项目1的pom文件 子项目2/ pom.xml 子项目2的pom文件按照这种格式存放,就是继承方式,所有具体子项目的pom.xml都会继承总项目pom的内容,取值为子项目pom内容优先。
要设置继承方式,首先要在总项目的pom中加入如下配置
${project.build. outputD irectory } results in the path to your "target/classes" dir ${project.name } refers to the name of the project. ${project.version } refers to the version of the project. ${project.build.finalName } refers to the final name of the file created when the built project is packaged 本地用户设定我们已经知道maven预定义了许多的阶段(phase),每个插件都依附于这些阶段,并且在进入某个阶段的时候,调用运行这些相关插件的功能。我们先来看完整的maven生命周期:
生命周期 阶段描述 validate 验证项目是否正确,以及所有为了完整构建必要的信息是否可用 generate-sources 生成所有需要包含在编译过程中的源代码 process-sources 处理源代码,比如过滤一些值 generate-resources 生成所有需要包含在打包过程中的资源文件 process-resources 复制并处理资源文件至目标目录,准备打包 compile 编译项目的源代码 process-classes 后处理编译生成的文件,例如对Java类进行字节码增强(bytecode enhancement) generate-test-sources 生成所有包含在测试编译过程中的测试源码 process-test-sources 处理测试源码,比如过滤一些值 generate-test-resources 生成测试需要的资源文件 process-test-resources 复制并处理测试资源文件至测试目标目录 test-compile 编译测试源码至测试目标目录 test 使用合适的单元测试框架运行测试。这些测试应该不需要代码被打包或发布 prepare-package 在真正的打包之前,执行一些准备打包必要的操作。这通常会产生一个包的展开的处理过的版本(将会在Maven 2.1+中实现) package 将编译好的代码打包成可分发的格式,如JAR,WAR,或者EAR pre-integration-test 执行一些在集成测试运行之前需要的动作。如建立集成测试需要的环境 integration-test 如果有必要的话,处理包并发布至集成测试可以运行的环境 post-integration-test 执行一些在集成测试运行之后需要的动作。如清理集成测试环境。 verify 执行所有检查,验证包是有效的,符合质量规范 install 安装包至本地仓库,以备本地的其它项目作为依赖使用 deploy 复制最终的包至远程仓库,共享给其它开发人员和项目(通常和一次正式的发布相关)maven核心的插件列表可以参考 http://maven.apache.org/plugins/index.html 。这里仅列举几个常用的插件及其配置参数:
除了以下的几个faq条目之外,还有一些faq可以参考
兄弟们如果有其他问题,欢迎跟帖提问!
4.1 依赖关系1) 问:如何增加删除一个依赖关系?答:直接在pom文件中加入一个dependency节点,如果要删除依赖,把对应的dependency节点删除即可。
2) 问:如何屏蔽一个依赖关系?比如项目中使用的libA依赖某个库的1.0版,libB以来某个库的2.0版,现在想统一使用2.0版,如何去掉1.0版的依赖?答:设置exclusion即可。
< dependency >答:加入一个特殊的依赖关系,使用system类型,如下:
< dependency >但是要记住,发布的时候不会复制这个jar。需要手工配置,而且其他project依赖这个project的时候,会报告警告。如果没有特殊要求,建议直接注册发布到repository。4) 问:在eclipse环境中同时使用maven builder和eclipse builder,并且设置项目依赖关系之后,为什么编译会出现artifact找不到错误,但是直接使用命令行mvn构建则一切正常?
答:在project属性中去掉java build path中对其他 project 的依赖关系,直接在pom中设置依赖关系即可
<!-- 依赖的其他项目 -->答:使用 assembly 插件即可。
< plugin >?6) 问:我的测试用例依赖于其他工程的测试用例,如何设置?
答:maven本身在发布的时候,可以发布单纯的jar,也可以同时发布xxx-tests.jar和xxx-javadoc.jar(大家经常在repository中可以看到类似的东西)。我们自己的项目A要同时输出test.jar可以做如下的设置
<!-- 用于把test代码也做成一个jar -->?
8)我刚刚更新了一下我的nexus库,但是我无法在eclipse中用m2eclipse找到我新增的库文件修改pom.xml文件,将旧版jar的依赖内容中的版本直接修改为新版本即可。
?
9)我要的jar最新版不在maven的中央库中,我怎么办?将依赖的文件安装到本地库,用如下命令可以完成:
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging> -DgeneratePom=trueWhere: <path-to-file> the path to the file to load <group-id> the group that the file should be registered under <artifact-id> the artifact name for the file <version> the version of the file <packaging> the packaging of the file e.g. jar10)4.2 变量1) 问:如何使用变量替换?项目中的某个配置文件比如jdbc.properties使用了一些pom中的变量,如何在发布中使用包含真实内容的最终结果文件?
答:使用资源过滤功能,比如:
< project >答: maven-svn-revision-number-plugin 可以从 SVN 中获取版本号,并将其变成环境变量,交由其他插件或者profile使用,详细帮助在这里 。一般和resource的filter机制同时使用
< plugins >这段代码负责把resource文件中的内容替换成适当内容
repository = ${prefix.repository}有好几种方法都可以实现跳过单元测试步骤,一种是给mvn增加命令行参数 -Dmaven.test.skip=true 或者 -DskipTests=true ;另外一种是给surefire插件增加参数,如下:
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.8</version> <configuration> <skipTests>true</skipTests> </configuration> </plugin> </plugins> </build> [...]</project>4) 如果只想运行单个测试用例,能否实现?
可以,运行时候增加命令行参数 -Dtest=MyTest 即可,其中MyTest是所需要运行的单元测试用例名称,但是不需要包含package部分。
4.3 编译1) 问:如何给插件指派参数?比如我要设置一些编译参数答:以下内容设定编译器编译java1.5的代码
< project >要设置其他插件的参数也可以,请参考对应插件的帮助信息
2) 问:我的目录是非标准的目录结构,如何设置让maven支持?答:指定source目录和test-source目录即可。
< build >这个例子把源代码设置成了src目录,测试代码在test目录,所以输出到bin目录。这里要注意,directory如果也设置成bin目录的 话,maven打包的时候会引起死循环,因为directory是所有工作存放的地方,默认包含outputDirectory定义的目录在内。
3) 我源代码是UTF8格式的,我如何在maven中指定?设置一个变量即可
< project >{color:blue}以上是官方给出的解决方案,但是经过尝试这样只能影响到resource处理时候的编码{color},真正有用的是如下配置:
{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/**</include> <include>com/sun/enterprise/util/i18n/**</include> <include>com/sun/enterprise/deployment/backend/IASDeploymentException.java</include> </includes> <excludes> <exclude>com/sun/enterprise/config/ConfigBeansFactory.java</exclude> <exclude>com/sun/enterprise/config/clientbeans/**</exclude> </excludes> </configuration> </plugin> </plugins> <resources> <resource> <directory>http://www.cnblogs.com/src/java</directory> <includes> <include>**/*.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.classpath3)如何使用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}FROM:http://www.cnblogs.com/BigTall/archive/2011/03/23/1993253.html