< groupId >com.alibaba </ groupId >
< artifactId >pampas </ artifactId >
< version >3-RC1 </ version >
</ parent >
37、
多模块项目中如何在其中某几个模块上执行命令?
mvn -pl biz/album -am -amd eclipse:eclipse
-pl 可以指定你需要执行命令的模块,以","分割。
-am 意思是:如果该模块依赖了同一个大项目下的其他的模块,也一并加入到reactor列表来执行后面的命令。
-amd 意思是:如果有依赖该模块的其他模块,也一并加入到reactor列表来执行后面的命令。
38、
不能编译使用了Sun私有API的代码
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>2.3.1</version>
- <configuration>
- <optimize>true</optimize>
- </configuration>
- <dependencies>
- <dependency>
- <groupId>org.codehaus.plexus</groupId>
- <artifactId>plexus-compiler-javac</artifactId>
- <version>1.8.1-patch</version>
- </dependency>
- </dependencies>
- </plugin>
39、
手动安装jar文件
the install command
mvn install:install-file -Dfile=your-artifact-1.0.jar \ [-DpomFile=your-pom.xml] \ [-DgroupId=org.some.group] \ [-DartifactId=your-artifact] \ [-Dversion=1.0] \ [-Dpackaging=jar] \ [-Dclassifier=sources] \ [-DgeneratePom=true] [-DcreateChecksum=true]
the deploy command
sample - memcached client jar
mvn install:install-file
-Dfile=java_memcached-release_2.0.1.jar
-DgroupId=com.alibaba.com.danga
-DartifactId=memcached
-Dversion=2.0.1
-Dpackaging=jar
-DgeneratePom=true
sample - c3p0
sample - spring-javamail - 1.4.0
sample - spring-activation - 1.1.0
b2b.commons.fasttext
mvn deploy:deploy-file -Durl=dav:http://repo.alibaba-inc.com/mvn/internal/releases -DrepositoryId=b2b.repo.server -DgroupId=com.alibaba.b2b.commons -DartifactId=fasttext -Dversion=1.2-090401 -Dpackaging=jar -Dfile=to_local_jar_file mvn deploy:deploy-file -Durl=dav:http://repo.alibaba-inc.com/mvn/internal/releases -DrepositoryId=b2b.repo.server -DgroupId=com.alibaba.b2b.commons -Dartifa
Identifier spring-release
Name Spring Portfolio Release Repository
URL http://maven.springframework.org/release
Type Maven 2.x Repository
Identifier spring-milestone
Name Spring Portfolio Milestone Repository
URL http://maven.springframework.org/milestone
Type Maven 2.x Repository
Identifier spring-external
Name Spring Portfolio External Repository
URL http://maven.springframework.org/external
Type Maven 2.x Repository
Identifier spring-ext
Name Spring External Dependencies Repository
URL http://springframework.svn.sourceforge.net/svnroot/springframework/repos/repo-ext/
Type Maven 2.x Repository
Identifier i21-s3-osgi-repo
Name i21 osgi artifacts repo with SNAPSHOTS!!!
URL http://maven.springframework.org/osgi
Type Maven 2.x Repository
将Maven2项目转为MyEclipse项目
简要步骤如下:
0. 为eclipse添加Maven2和MyEclipse插件 1. 将Maven项目转为Eclipse项目,具体操作为将dos命令窗口切换到Maven项目的目录下,输入命令: mvn eclipse:eclipse 2. 进入eclipse,将这个项目导入工作空间 3. 在该项目上点右键Maven->Enable 4. 在该项目上点右键Build Path->Configure Build Path->Java Build Path->Libraries->去掉Maven添加的变量路径 5. 在该项目上点右键MyEclipse->Add Web Capabilities->修改Web root地址(点【浏览】按钮指定为当前工作空间下的src/main/webapp文件夹) 6. 配置完毕,可以用MyEclipse插件配置服务器等开始正常开发,自动部署,调试等操作了。 |
43、Jetty配置
< groupId >org.mortbay.jetty </ groupId >
< artifactId >maven-jetty-plugin </ artifactId >
< version >6.1.9 </ version >
</ plugin >
jetty->请求的操作无法在使用用户映射区域打开的文件上执行
jetty\etc\webdefault.xml中
- <init-param>
- <param-name>useFileMappedBuffer</param-name>
- <param-value>true</param-value> <!-- 将这个值设为 false -->
- </init-param>
原贴http://docs.codehaus.org/display/JETTY/Files+locked+on+Windows
或者在web.xml中插入如下信息:
- <servlet>
- <servlet-name>default</servlet-name>
- <servlet-class>org.mortbay.jetty.servlet.DefaultServlet</servlet-class>
- <init-param>
- <param-name>useFileMappedBuffer</param-name>
- <param-value>false</param-value>
- </init-param>
- <load-on-startup>0</load-on-startup>
- </servlet>
- <init-param>
- <param-name>useFileMappedBuffer</param-name>
- <param-value>true</param-value> <!-- 将这个值设为 false -->
- </init-param>
原贴http://docs.codehaus.org/display/JETTY/Files+locked+on+Windows
或者在web.xml中插入如下信息:
- <servlet>
- <servlet-name>default</servlet-name>
- <servlet-class>org.mortbay.jetty.servlet.DefaultServlet</servlet-class>
- <init-param>
- <param-name>useFileMappedBuffer</param-name>
- <param-value>false</param-value>
- </init-param>
- <load-on-startup>0</load-on-startup>
- </servlet>
44、Maven实现远程拷贝
maven支持多种发布协议(URL),如下
- file: 格式是file://path to repository,是最简单最易用的一种,可惜只能在本机上进行发布
- scp: 格式scp://host/path to repository,是安全文件拷贝的方式,也是maven介绍最多的一种,可惜牵扯到privateKey等问题,到现在还没有搞定 :(
- scpexe: 格式scpexe://host/path to repository,和scp基本类似,不过在这里不是用maven自带的scp处理,而是利用外部的scp命令进行copy,结合ssh的基本信息,尝试成功了 :)
- ftp: 格式ftp://host/path to repository,采用ftp协议的方式进行上传,不过需要扩展插件:wagon-ftp,及相关的common-net等
- 在客户机上生成key,
sql 代码
- ssh-keygen -t rsa -f $HOME/.ssh/id_rsa -P ''
- ssh-keygen -t rsa -f $HOME/.ssh/id_rsa -P ''
- 传送 $HOME/.ssh/id_rsa.pub到服务器主机上
- 在服务器用户创建authorized_keys
sql 代码
- $ cat id_rsa.pub >> $HOME/.ssh/authorized_keys2
- $ chmod 0600 $HOME/.ssh/authorized_keys2
- $ cd $HOME/.ssh && ln -s authorized_keys2 authorized_keys
- 用mvn deploy测试或者用ssh user@host测试
45、Maven命令补充
(2)项目生成 java doc
mvn package -Dtest javadoc:javadoc -DfailIfNoTests=false
mvn package -Dtest -DfailIfNoTests=false
mvn -U -Dtest clean package assembly:assembly -DfailIfNoTests=false
忽略测试-DfailIfNoTests=false
46、Maven Plugin地址
在maven项目的pom.xml中加入Clover的plugin,如下:
- <plugin>
- <artifactId>maven-clover-plugin</artifactId>
- <groupId>com.atlassian.maven.plugins</groupId>
- <configuration>
- <licenseLocation>${clover.licenseLocation}</licenseLocation>
- <targetPercentage>50%</targetPercentage>
- </configuration>
- </plugin>
此处的clover.licenseLocation是指Maven安装后本地repository配置目录的settings.xml中licenseLocation的位置.Maven的本地repository一般是在windows用户目录下
,(这个licenseLocation中不可以指定成C:/clover.license的样式,Maven找不到这个格式的地址,这个地方是个trap.)如C:\Documents and Settings\user\.m2中,在这个全局settings中需要配置clover的license的东西,具体是在profile节点中配置,设置如下
- <profiles>
- <profile>
- <id>myprofile</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <properties>
- <clover.licenseLocation>C:/clover.license</clover.licenseLocation>
- </properties>
- <pluginRepositories>
- <pluginRepository>
- <id>atlassian-m2-repository</id>
- <name>Atlassian Maven 2.x Repository</name>
- <url>http://repository.atlassian.com/maven2</url>
- </pluginRepository>
- </pluginRepositories>
- </profile>
- </profiles>
48、让Maven正确处理javac警告
…
[ERROR] \workspaces\mvn\javac-warning-test\src\main\java\com\juvenxu\TestJavacWarning.java:[7,32] 警告:sun.misc.BASE64Decoder 是 Sun 的专用
API,可能会在未来版本中删除
[INFO] ————————————————————-
[INFO] BUILD FAILURE
这当然是不合理的,javac只是警告而已,maven凭什么就直接报失败呢?
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>2.3.2</version>
- </plugin>
49、按照要求生成编译后的名字 - finalName
- <build>
- <finalName>JtlParser</finalName>
- </build>
50、为打包的jar文件指定main方法的类
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <configuration>
- <archive>
- <manifest>
- <mainClass>com.alibaba.jmeter.JTLParser</mainClass>
- </manifest>
- </archive>
- </configuration>
- </plugin>
为jar或assembly jar指定main方法
- <build>
- <finalName>demo02.client</finalName>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <configuration>
- <archive>
- <manifest>
- <mainClass>lavasoft.suths.service.client.Client</mainClass>
- </manifest>
- </archive>
- </configuration>
- </plugin>
- <plugin>
- <artifactId>maven-assembly-plugin</artifactId>
- <configuration>
- <descriptorRefs>
- <descriptorRef>jar-with-dependencies</descriptorRef>
- </descriptorRefs>
- <archive>
- <manifest>
- <mainClass>lavasoft.suths.service.client.Client</mainClass>
- </manifest>
- </archive>
- </configuration>
- </plugin>
- </plugins>
- </build>
jar为:demo02.client.jar
assembly jar为:demo02.client-jar-with-dependencies.jar
运行:
- D:\code.temp\demo02.client\target>java -jar demo02.client-jar-with-dependencies.jar
- welcome you, Hessian, from remote!
assembly生成的jar中可能存在重复的文件情况,这是maven版本的问题,参考:http://www.wsria.com/archives/958。 解决方案如下:
- <plugin>
- <artifactId>maven-assembly-plugin</artifactId>
- <version>2.2-beta-5</version>
- <configuration>
- <descriptorRefs>
- <descriptorRef>jar-with-dependencies</descriptorRef>
- </descriptorRefs>
- </configuration>
- </plugin>
51、超级POM
52、mvn site:run
53、Maven eclipse插件
- [INFO] [enforcer:enforce {execution: enforce-plugin-versions}]
- [WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequirePluginVersions failed with message:
- Some plugins are missing valid versions:(LATEST RELEASE SNAPSHOT are not allowed )
- com.alibaba.org.apache.maven.plugins:maven-eclipse-plugin. The version currently in use is 2.5.1-alibaba-0
- Build reproducibility : always define plugin versions
- [INFO] ------------------------------------------------------------------------
- [ERROR] BUILD ERROR
- <plugin>
- <groupId>com.alibaba.org.apache.maven.plugins</groupId>
- <artifactId>maven-eclipse-plugin</artifactId>
- <version>2.5.1-alibaba-0</version>
- </plugin>
54、编写Hudson插件步骤
- <settings>
- ..
- <pluginGroups>
- <pluginGroup>org.jvnet.hudson.tools</pluginGroup>
- </pluginGroups>
- ..
- </settings>
55、使用Maven快速创建Spring Osgi Bundle
- <profile>
- <id>taobao</id>
- <repositories>
- <repository>
- <id>tbmirror-central</id>
- <name>taobao mirror central</name>
- <url>http://....../mvn/repository</url> <!--处于保护,去掉了具体的url地址-->
- <snapshots>
- <enabled>true</enabled>
- </snapshots>
- <releases>
- <enabled>true</enabled>
- </releases>
- </repository>
- </repositories>
- </profile>
- <activeProfiles>
- <activeProfile>taobao</activeProfile>
- </activeProfiles>
- emma:emma Instruments, tests, and generates an EMMA report.
- emma:check Check last intrumentation results.
- emma:instrument Offline class instrumentor.
- emma:clean Clean EMMA generated resources.
59、mvn archetpye:generate出错
默认在maven内运行jetty,将会锁定站点的js、css等文件,不便于随时修改,可以手工将c:\Documents and Settings\dvlp\.m2\repository\org\
mortbay\jetty\jetty\6.1.9\jetty.jar内的webdefault.xml内useFileMappedBuffer项改为false即可。
61、安装第三方jar包到本地库
Mvn install:install-file –Dfile=foo.jar –DgroupId=org.foosoft –DartifactId=foo –Dversion=1.2.3 –Dpackaging=jar
62、Maven2中新增Dependency Scope
在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值:
- compile,缺省值,适用于所有阶段,会随着项目一起发布。
- provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
- runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
- test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
- system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
<scope>的使用举例:
<dependency> <groupId>hibernate</groupId> <artifactId>hibernate</artifactId> <version>3.0.3</version> <scope>test</scope> </dependency> |
63、Maven中央仓库
在maven的安装目录(apache-maven-2.2.1\lib)下面lib包(maven-2.2.1-uber.jar)中,规定了maven的中央仓库的位置和工程的目录结构, maven-2.2.1-uber.jar\org\apache\maven\project \pom-4.0.0.xml.
其中指定了源代码、测试代码等的存放方式,以及常用插件的版本和方法。
64、公司的白名单使用了enforcer插件的配置
在.m2\repository\com\alibaba\pampas\3-RC1下面的pampas-3-RC1.pom中规定了黑白名单的限制
- <!-- enforcer rules -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-enforcer-plugin</artifactId>
- <version>1.0-beta-1</version>
- <dependencies>
- <dependency>
- <groupId>com.alibaba.maven.enforcer</groupId>
- <artifactId>pampas.rules.caclist</artifactId>
- <version>1.0-SNAPSHOT</version>
- </dependency>
- </dependencies>
- <configuration>
- <rules>
- <cacEnforcerRule implementation="com.alibaba.maven.enforcer.rule.CacEnforcerRule">
- <whiteListUrl>http://repo.alibaba-inc.com/mvn/wl.txt</whiteListUrl>
- </cacEnforcerRule>
- </rules>
- </configuration>
- <executions>
- <execution>
- <id>enforce</id>
- <goals>
- <goal>enforce</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
65、定制化maven的工程
Maven的标准目录结构其实是在Super POM中设置的,由于任何POM都会继承该POM,所以所有的工作都会默认使用标准目录结构。要定制目录,其实就是需要重新设置相关参数的值,即用新值覆盖Super POM中的值。
[1]<finalName>,该元素指定了工程输出的artifact的名称,默认值为${artifactId}-${version},此处修改为app。
[2]<directory>,该元素指定了工程输出的目标目录。默认值为target,此处未修改变。
[3]<sourceDirectory>,该元素指定了Java源文件所在的目录。默认值为src/main/java,此处修改为src/java。
[4]<outputDirectory>,该元素指定了编译后的class文件的放置目录。默认值为target/classes,此处未作改变。
[5]<resources> <resource>,该元素指定了Java源文件使用的资源文件的存放目录。默认值为src/main/resources,此处修改为src/java。由于在编码Java源文件时,Maven会将资源路径中的文件全部拷贝到classes目录。而此时将Java资源文件目录与Java源文件目录,设置为同一目录,所以需要将.java文件排除在资源文件的范畴之外( <exclude>**/*.java</exclude> )。
[6] <testSourceDirectory>,该元素指定了单元测试Java源文件的放置目录。默认值为src/test/java,此处未作修改。
[7] <testOutputDirectory>,该元素指定了单元测试Java源文件编译后的class文件放置目录。默认值为 target/test-classes,此处未作改变。
[8] <testResources> <testResource>,该元素指定了单元测试Java源文件所使用的资源文件的放置目录。默认值为src/test /resources,此处修改为 src/test/java。并且也做了与 设置<resources> <resource>时相同的处理(排除Java源文件)。
通过上述设置后,就可以拥有一个定制的Maven工程目录结构了。
本文转自 tianya23 51CTO博客,原文链接:http://blog.51cto.com/tianya23/386891,如需转载请自行联系原作者