设为首页 收藏本站
查看: 774|回复: 0

[经验分享] Maven问题总结

[复制链接]

尚未签到

发表于 2017-2-28 08:44:58 | 显示全部楼层 |阅读模式
  Maven问题总结 - 3 - 技术改变生活商业成就梦想 - iyunv技术博客



Maven问题总结 - 32010-09-03 13:29:32
标签:maven
Maven问题总结 - 3

http://tianya23.blog.iyunv.com/1081650/289363
http://tianya23.blog.iyunv.com/1081650/364072
maven安装:http://b2b-doc.alibaba-inc.com/display/opentech/Maven
私服中release版本的plugin的位置:http://repo.alibaba-inc.com/mvn/internal/releases/com/alibaba/maven/plugins/
私服的plugin是不受限制的,所以和外面的使用方式是一样的, 可以直接google或者参考其他项目的pom


<parent>
         <groupId>com.alibaba</groupId>
         <artifactId>pampas</artifactId>
         <version>3-RC1</version>
</parent>
  

37、
多模块项目中如何在其中某几个模块上执行命令?





有时候我们需要在 一堆子模块中的其中某几个上执行特定的命令,我们可以用reactor插件完成。maven 2.1开始吧这个功能简化到了命令行上。


实例1 - 在指定某个模块 上执行eclipse:eclipse

mvn -pl biz/album -am -amd eclipse:eclipse
解释:
   -pl 可以指定你需要执行命令的模块,以","分割。
   -am 意思是:如果该模块依赖了同一个大项目下的其他的模块,也一并加入到reactor列表来执行后面的命令。
   -amd 意思是:如果有依赖该模块的其他模块,也一并加入到reactor列表来执行后面的命令。
详细历史渊源参见: http://jira.codehaus.org/browse/MNG-2576
38、


不能编译使用了Sun私有API的代码








Maven + JDK6 如果碰到代码使用废弃的或者sun内部的API,会编译失败。此问题源于plexus中的compiler模块不能正确的处理javac输出的中文警告信息。


解决办法是用我们修正过的插件:
POM中配置。

  • <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

http://maven.apache.org/plugins/maven-install-plugin/usage.html

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

http://maven.apache.org/plugins/maven-deploy-plugin/usage.html

mvn deploy:deploy-file -Durl=file://C:\m2-repo \
-DrepositoryId=some.id \
-Dfile=your-artifact-1.0.jar \
[-DpomFile=your-pom.xml] \
[-DgroupId=org.some.group] \
[-DartifactId=your-artifact] \
[-Dversion=1.0] \
[-Dpackaging=jar] \
[-Dclassifier=test] \
[-DgeneratePom=true] \
[-DgeneratePom.description="My Project Description"] \
[-DrepositoryLayout=legacy] \
[-DuniqueVersion=false]
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=truesample - c3p0


mvn deploy:deploy-file
-Dpackaging=jar
-DgeneratePom=true
-DgroupId=com.alibaba.com.mchange
-DartifactId=v2.c3p0
-Dversion=0.9.1.2.osgi
-Dfile=com.alibaba.com.mchange.v2.c3p0-0.9.1.2.osgi.jar
-Durl=file://any_vaild_url_for_remote_server
-DrepositoryId=some.id
sample - spring-javamail - 1.4.0


mvn deploy:deploy-file
-DgroupId=com.springsource.javax.mail
-DartifactId=mail
-Dversion=1.4.0.osgi
-Dpackaging=jar
-Dfile=to_local_jar
-Durl=dav:http://platoo.alibaba-inc.com/mvn/internal/releases
-DrepositoryId=platoo-maven-server
sample - spring-activation - 1.1.0


mvn deploy:deploy-file
-DgroupId=com.springsource.javax.activation
-DartifactId=activation
-Dversion=1.1.0.osgi
-Dpackaging=jar
-Dfile=to_local_jar_file
-Durl=dav:http://platoo.alibaba-inc.com/mvn/internal/releases
-DrepositoryId=platoo-maven-server
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



40、

SpringMaven Repos






Spring Portfolio Release Repository
Identifier     spring-release
Name     Spring Portfolio Release Repository
URL     http://maven.springframework.org/release
Type     Maven 2.x Repository
Spring Portfolio Milestone Repository
Identifier     spring-milestone
Name     Spring Portfolio Milestone Repository
URL     http://maven.springframework.org/milestone
Type     Maven 2.x Repository
Spring Portfolio External Repository
Identifier     spring-external
Name     Spring Portfolio External Repository
URL     http://maven.springframework.org/external
Type     Maven 2.x Repository
Spring External Dependencies 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
i21 osgi artifacts repo with SNAPSHOTS!!!
Identifier     i21-s3-osgi-repo
Name     i21 osgi artifacts repo with SNAPSHOTS!!!
URL     http://maven.springframework.org/osgi
Type     Maven 2.x Repository



41、


将Maven2项目转为MyEclipse项目



现在项目中,大家开始用jetty。它不用像在MyEclipse中使用Tomcat那样要部署,也不用像在Tomcat中那样,要把应用都放到webapp文件夹下。jetty可以直接用你的项目的目录结构。
我们在用maven的时候,应该用maven标准的目录结构。由于jetty可以直接用你的项目的目录结构,所以jetty可以和maven很好的结合。




当然我们也可以使用Tomcat,并且也可以用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插件配置服务器等开始正常开发,自动部署,调试等操作了。



42、Maven各阶段使用的插件

43、Jetty配置

在插件位置配置jetty, 在配置的时候也可以不指定插件的版本, 默认使用


  <plugin>
         <groupId>org.mortbay.jetty</groupId>
         <artifactId>maven-jetty-plugin</artifactId>
         <version>6.1.9</version>
       </plugin>
jetty->请求的操作无法在使用用户映射区域打开的文件上执行

jetty\etc\webdefault.xml中



Java代码 http://xlofty.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf?clipboard=%3Cinit-param%3E%0A%20%20%3Cparam-name%3EuseFileMappedBuffer%3C%2Fparam-name%3E%0A%20%20%3Cparam-value%3Etrue%3C%2Fparam-value%3E%20%3C!--%20%E5%B0%86%E8%BF%99%E4%B8%AA%E5%80%BC%E8%AE%BE%E4%B8%BA%20false%20--%3E%0A%3C%2Finit-param%3E%0A

  • <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管理多个工程或者模块,不可避免的要用她的deploy/deploy-file功能,其基本用法在此不再累赘,请参考maven.apache.org/plugins/maven-deploy-plugin/usage.html
   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等
  下边说说不需要密码的scpexe处理方式,其实其根本还是ssh相关的知识。其步骤如下

  • 在客户机上生成key,
    sql 代码

    • ssh-keygen -t rsa -f $HOME/.ssh/id_rsa -P ''  


  • 传送 $HOME/.ssh/id_rsa.pub到服务器主机上
  • 在服务器用户创建authorized_keys
    sql 代码

    • $Snbsp;cat id_rsa.pub >> $HOME/.ssh/authorized_keys2  
    • $Snbsp;chmod 0600 $HOME/.ssh/authorized_keys2  
    • $Snbsp;cd $HOME/.ssh && ln -s authorized_keys2 authorized_keys  

  • 用mvn deploy测试或者用ssh user@host测试
    以上操作我在debian linux下边成功 45、Maven命令补充

(1)产生项目原文件输入:mvn source:jar
  (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官方插件:http://maven.apache.org/maven-1.x/plugins/bundled/
第三方插件:http://maven.apache.org/maven-1.x/plugins/3rdparty.html
Sandbox插件:http://maven.apache.org/maven-1.x/plugins/sandbox/

47、Maven与Clover集成总结,license问题

在maven项目的pom.xml中加入Clover的plugin,如下:



Java代码 http://darkjune.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf?clipboard=%20%20%20%20%20%20%20%20%20%20%20%20%3Cplugin%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CartifactId%3Emaven-clover-plugin%3C%2FartifactId%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CgroupId%3Ecom.atlassian.maven.plugins%3C%2FgroupId%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cconfiguration%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3ClicenseLocation%3E%24%7Bclover.licenseLocation%7D%3C%2FlicenseLocation%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CtargetPercentage%3E50%25%3C%2FtargetPercentage%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fconfiguration%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fplugin%3E%0A

  • <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节点中配置,设置如下



Java代码 http://darkjune.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf?clipboard=%3Cprofiles%3E%0A%20%20%3Cprofile%3E%0A%20%20%20%20%3Cid%3Emyprofile%3C%2Fid%3E%0A%20%20%20%20%3Cactivation%3E%0A%20%20%20%20%20%20%3CactiveByDefault%3Etrue%3C%2FactiveByDefault%3E%0A%20%20%20%20%3C%2Factivation%3E%0A%20%20%20%20%20%20%3Cproperties%3E%0A%20%20%20%20%20%20%20%20%3Cclover.licenseLocation%3EC%3A%2Fclover.license%3C%2Fclover.licenseLocation%3E%0A%20%20%20%20%20%20%3C%2Fproperties%3E%0A%20%20%20%20%20%20%3CpluginRepositories%3E%0A%20%20%20%20%20%20%3CpluginRepository%3E%0A%20%20%20%20%20%20%20%20%3Cid%3Eatlassian-m2-repository%3C%2Fid%3E%0A%20%20%20%20%20%20%20%20%3Cname%3EAtlassian%20Maven%202.x%20Repository%3C%2Fname%3E%0A%20%20%20%20%20%20%20%20%3Curl%3Ehttp%3A%2F%2Frepository.atlassian.com%2Fmaven2%3C%2Furl%3E%0A%20%20%20%20%20%20%3C%2FpluginRepository%3E%0A%20%20%20%20%3C%2FpluginRepositories%3E%0A%20%20%20%20%20%3C%2Fprofile%3E%0A%3C%2Fprofiles%3E%0A

  • <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警告

http://www.juvenxu.com/2010/09/01/maven-javac-warning/
现象:如果你用maven编译项目,而且在项目中用了SUN的专用API,你会得到警告信息,然后Maven会报告编译失败,像这个样子:
  …
[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凭什么就直接报失败呢?

maven-compiler-plugin 2.3.2 发布了,因此只需要配置使用该版本就ok了  



view plaincopy to clipboardprint?

  • <plugin>  
  •     <groupId>org.apache.maven.plugins</groupId>  
  •     <artifactId>maven-compiler-plugin</artifactId>  
  •     <version>2.3.2</version>  
  • </plugin>  
49、按照要求生成编译后的名字 - finalName

我们已经通过在项目的构建配置中加入 finalName 元素来自定义这个生成的
WAR 文件的名称。根据 simple-webapp 的 finalName ,package 阶段生成的 WAR 文件
为 target/simple-webapp.war 。

  • <build>
  •      <finalName>JtlParser</finalName>
  • </build>
50、为打包的jar文件指定main方法的类

这样就可以直接用java -jar JtlParser.jar执行里面的main方法了.
手工的方法也可以参考:http://jimjun2003.blog.163.com/blog/static/86730756200871210281370/

  • <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


     所有的Maven项目的POM都扩展自超级POM。超级POM定义了一组被所有项目共享的默认设置。它是Maven安
装的一部分,可以在/usr/local/maven/lib中的maven-2.0.9-uber.jar文件中找到。如果你看一下这个JAR文件,你会看到在包org.apache.maven.project下看到一个名为pom-4.0.0.xml的文件。
    默认的超级POM定义了一个单独的远程Maven仓库,ID为central。这是所有Maven客户端默认配置访问的中央Maven仓库。该配置可以通过一个自定义的settings.xml文件来覆盖。注意这个默认的超级POM关闭了从中央Maven仓库下载snapshot构件的功能。如果你需要使用一个snapshot仓库,你就要在你的pom.xml或者settings.xml中自定义仓库设置。
...... 52、mvn site:run


要在浏览器中预览结果,你可以运行mvn site:run,Maven会构建站点并启动一个内嵌的Jetty容器。一旦Jetty启动并开始监听8080端口,你就可以通过在浏览器中输入http://localhost:8080/查看项目站点了。
53、Maven eclipse插件

在pom中制定了enforce插件的时候,可能存在外面默认的插件与公司的插件不一致的情况,出现的错误如下:

  • [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插件步骤

步骤1:settings.xml文件中添加  

  • <settings>  
  • ..
  • <pluginGroups>  
  •   <pluginGroup>org.jvnet.hudson.tools</pluginGroup>  
  • </pluginGroups>  
  • ..  
  • </settings>  

步骤2:创建插件工程
mvn hpi:create  
步骤3:编译插件工程
mvn clean install
mvn -DdownloadSources=true eclipse:eclipse  
  55、使用Maven快速创建Spring Osgi Bundle

http://towerhe.javaeye.com/blog/274722
手工创建Spring Osgi Bundle:http://towerhe.javaeye.com/blog/282836

56、Maven的重定向功能
Maven的jar包中可能依赖的jar包的pom都可能存在变化,比如说artifactId等, 所以在maven服务器端可能需要进行重定向操作。在pom中使用<relocation>标签来解决
57、访问外部的maven仓库
步骤1:在settings.xml中加入外部仓库的profile

  • <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>

步骤2:使用-P参数进行访问
mvn clean install -Ptaobao
也可以将taobao修改为默认的profile,则不再需要使用-P参数进行指定

  • <activeProfiles>
  •         <activeProfile>taobao</activeProfile>
  •     </activeProfiles>

57、《Maven实战》
http://www.javaeye.com/wiki/hzbook/2872-Maven-in-action

58、Maven对Emma支持,对Jar包直接使用mvn emma:emma, 对war实验下来是不行
参考:http://mojo.codehaus.org/emma-maven-plugin/
The Emma Plugin has four goals.  

  • 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出错

可能存在的问题:
问题1、引入了snapshot的插件,导致不稳定  
解决方案:在使用命令的时候指定使用插件的版本:mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-4:generate,参考http://juvenshun.javaeye.com/blog/485407

问题2、本地仓库或者私服不存在generate的插件,尤其是第一次使用的时候容易出现
解决方案:关闭公司的settings.xml,再用mvn archetpye:generate, 到maven的中央仓库去下载插件。

问题3:、可以通过指定骨架的版本来解决;默认下载最新,如果下载不到,会报错

mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.0
或者
指定代理访问仓库的骨架,代理到maven中央仓库的访问更加的健壮:mvn archetype:generate -P b2b.unmanaged(需要settings.xml配置文件有效,因为使用的是里面定义的”<id>b2b.unmanaged</id>“)

【注意】
(1)maven中央仓库骨架:网络不通,暂无法指定
公司骨架:http://repo.alibaba-inc.com/mvn/archetype-catalog.xml
(2)指定骨架:mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.0
(3) 骨架的类型包括公司的骨架和maven中央仓库的骨架

60、maven运行jetty时js、css等文件不能修改问题  默认在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工程目录结构了。
  同时可参考:http://www.duduwolf.com/wiki/2008/771.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-348174-1-1.html 上篇帖子: dubbo_实现Hessian的远程调用协议 下篇帖子: 使用Java实现Comet风格的Web应用(消息在线提醒)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表