`
snoopy7713
  • 浏览: 1148860 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

Maven问题总结

阅读更多

Maven问题总结

(1)Maven archetype:generate
(2)mkdir src\main\resources,src\test\resources
(3)添加parent

<parent>
    <groupId>com.alibaba</groupId>
    <artifactId>pampas</artifactId>
    <version>3-RC1</version>
</parent>
 由于在3-RC1中的使用做了黑白名单的限制,具体限制为:http://repo.alibaba-inc.com/mvn/wl.txt
com.alibaba.*
com.alifi.*
com.taobao.security
com.taobao.util
 或者
(4)查询maven仓库
 
 (5) 官方Plugin在仓库中的位置
.m2\repository\org\apache\maven\plugins
(6)一方库、二方库、三方库
一方库:本工程中的相互依赖
二方库:公司内部的依赖库,一般指公司内部的其他项目发布的jar包
三方库:公司之外的开源库, 比如apache、ibm、google等发布的依赖
(7)、maven插件源代码地址和jira地址汇总

1、Maven指定编译级别

用 maven来编译java类时,一个类总是出现不支持泛型的错误提示。泛型是从JDK5.0+才开始支持的,而我在eclipse中所用的JRE版本都是 5.0以上的。后来才发现必须在pom.xml文件中加入下一面一段语句来指定所用的版本,尽管在eclipse中配置了正确的“Build Path”。

<build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <target>1.6</target>
          <source>1.6</source>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
    </plugins>
  </build>
 自定资源文件的编码设置:
<plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-resources-plugin</artifactId>  
            <version>2.3</version>  
            <configuration>  
                <encoding>UTF-8</encoding>  
            </configuration>  
</plugin>  
 指定使用的单元测试框架
    <plugin> 
               <groupId>org.apache.maven.plugins</groupId> 
               <artifactId>maven-surefire-plugin</artifactId> 
                    <configuration> 
                        <junitArtifactName>com.alibaba.external:test.junit</junitArtifactName> 
                        <testNGArtifactName>com.alibaba.external:test.testng</testNGArtifactName> 
    <version>2.5</version>
                        <excludes> 
                            <exclude>**/IT*.java</exclude> 
                            <exclude>**/*Bean.java</exclude> 
                            <exclude>**/TestHelper.java</exclude> 
                        </excludes> 
                    </configuration> 
               </plugin> 
 经过验证的排除单元测试实例:< exclude > com/alibaba/external/junit/*.java </ exclude >表示为 排除com.alibaba.external.junit包下面的所有java文件。
    <plugin> 
                    <groupId>org.apache.maven.plugins</groupId> 
                    <artifactId>maven-surefire-plugin</artifactId> 
                    <configuration> 
                        <junitArtifactName>com.alibaba.external:test.junit 
                        </junitArtifactName> 
                        <testNGArtifactName>com.alibaba.external:test.testng 
                        </testNGArtifactName> 
                        <version>2.5</version> 
                        <excludes> 
                            <exclude>com/alibaba/external/junit/*.java</exclude> 
                        </excludes> 
                    </configuration> 
                </plugin> 
或者 
    <build> 
            <plugins> 
                <plugin> 
                    <groupId>org.apache.maven.plugins</groupId> 
                    <artifactId>maven-compiler-plugin</artifactId> 
                    <configuration> 
                        <source>1.6</source> 
                        <target>1.6</target> 
                        <encoding>UTF-8</encoding> 
                    </configuration> 
                </plugin> 
                <plugin> 
                    <groupId>org.apache.maven.plugins</groupId> 
                    <artifactId>maven-jar-plugin</artifactId> 
                    <configuration> 
                        <archive> 
                            <manifest> 
                                <addClasspath>true</addClasspath> 
                            </manifest> 
                        </archive> 
                    </configuration> 
                </plugin> 
                <plugin> 
                    <groupId>org.apache.maven.plugins</groupId> 
                    <artifactId>maven-resources-plugin</artifactId> 
                    <version>2.4.1</version> 
                    <configuration> 
                        <encoding>UTF-8</encoding> 
                    </configuration> 
                </plugin> 
            </plugins> 
        </build> 
 
    <repositories> 
            <repository> 
                <id>args4j-repository</id> 
                <url>http://download.java.net/maven/2/</url> 
            </repository> 
        </repositories> 

父pom中自定义,子模块从此pom中继承:
    <properties>  
            <cms.groupId>com.alibaba.cms</cms.groupId> 
             <cms.version>1.0.0</cms.version> 
    </properties> 
    <groupId>${cms.groupId}</groupId> 
        <version>${cms.version}</version> 
 

【注意】我们已经通过在项目的构建配置中加入 finalName 元素来自定义这个生成的

WAR 文件的名称。根据 simple-webapp 的 finalName ,package 阶段生成的 WAR 文件

为 target/simple-webapp.war 。

2、Eclipse的编译级别

project工程名->Properties->Java Compiler->Compiler compilance level使用1.5以上的
且勾上‘use default compliance settings’
 

3、Eclipse中出现maven的相关依赖

右键点击工程名 -> maven -> Update Project Configuration , 则会出现一个叫Maven Dependencies的libaray包。
4、Maven排除应用的jar包
<dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.15</version>
      <exclusions>
        <exclusion>
          <groupId>com.sun.jdmk</groupId>
          <artifactId>jmxtools</artifactId>
        </exclusion>
        <exclusion>
          <groupId>com.sun.jmx</groupId>
          <artifactId>jmxri</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
 5、在maven中可能存在如下的错误
写道
Failure executing javac, but could not parse the error:
错误:读取 C:\Documents and Settings\keju.wangkj\.m2\repository\com\sun\jdmk\jmxtools\1.2.1\jmxtools
-1.2.1.jar 时出错;error in opening zip file
错误:读取 C:\Documents and Settings\keju.wangkj\.m2\repository\com\sun\jmx\jmxri\1.2.1\jmxri-1.2.1.
jar 时出错;error in opening zip file
2 错误
 
解决方案:由于maven下载了空壳的jar包在仓库中,只有1k左右,删除之后让maven重新下载

6、Maven打包依赖

<build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
        </plugins>
</build>
 
执行命令:mvn assembly:assembly , 执行完成之后会把相关的依赖一起打包
可直接使用:mvn install assembly:assembly
生成的jar中可能存在重复文件的问题,是版本的问题,参考: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> 
 

7、创建resource文件

写道
mkdir -p src/{main/java/com/mycompany/webapp,test/java/com/mycompany/webapp,test/resources}
 【注意】这是在linux下运行的, 而在windows下面使用'\',且不用'-p'

8、修改工程的仓库
1.Maven2的依赖库查询
http://www.mvnrepository.com/

2.更改默认的maven2的仓库,需在pom.xml文件中添加设置(如有私服须放置在前面)
 < repositories>
           < repository>
            < id>ibiblio< /id>
            < name>Ibiblio Maven Repository< /name>
            < url>http://www.ibiblio.org/maven2< /url>
            < layout>default< /layout>
        < /repository>
        < repository>
            < id>maven< /id>
            < name>Slowly office site< /name>
            < url>http://repo1.maven.org/maven2< /url>
        < /repository>
  < /repositories>
<repositories><repository> </repository></repositories>
  
------------------------------------------------------------------------------------------
修改%M2_HOME%/conf/settings.xml即可
确实是改settings.xml比较一劳永逸,每个项目的pom都去加repository对配置管理是不利的。

9、Maven版本差别造成的问题
2.0.9 下编译完全没有问题, 而在2.0.10以 上的版本编译的哦时候出现以下问题:
写道
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error configuring: org.apache.maven.plugins:maven-antrun-plugin. Reason: java.lang.NoSuchMethodError: org.apache.tools.ant.util.FileUtils.close(Ljava/io/InputStream;)V
 
原理分析和解决方案:
由于多个包里面的引用的相同jar包的版本有问题,需要使用
<exlutions></exlutions>

10、Maven问题排查方式

如何诊断在Maven构建过程中碰到的问题?可以看一下这些手段:
 
    1. 你正运行什么版本的Maven?  如 果不是Maven 2.0.9或以上,你需要升级。 Maven 2.0.9是第一个设置了核心插件版本的Maven版本。为什么这很重要呢?因为在2.0.9之前,Maven会自动下载核心插件的最新版本,比如jar 插件和compiler插件。而最新版本插件由于其不稳定性可能导致你的构建失败。因此,如果你还在使用2.0.9以下的Maven,升级吧。
 
    2. 有时候遇到奇怪问题的时候,清理一下你的本地仓库。检查一下snapshots的更新策略。
 
    3. 使用:
mvn help:effective-pom      查看有效POM
mvn help:effective-settings    查看有效settings
mvn help:active-profiles    查看激活的profile
这 些命令会检查所有的的pom文件,settings文件,profile文件,帮助你查看其中的差异和影响。可能有些人在~/.m2 /settings.xml 或者M2_HOME/conf/settings.xml做了自定义。(详细请参考http://www.sonatype.com/book /reference_zh/installation.html)
 
   4. 你是否正使用公共仓库?时候有两台机器访问不同的仓库?如果你没有使用Nexus,我建议你下载并运行使用它  ,它能让你更好的了解配置仓库,并且是一个很好的发布构件的地方。
-~-~—~-~-~-~-~
 
我再补充两点: 
   5. 使用-X参数查看Maven详细运行情况,如 mvn clean install -X  ,让Maven打开debug日志。 
   6. 将完整的异常信息,pom.xml, settings.xml 发到我们的讨论组:http://groups.google.com/group/maven-zh  ,这里总有热心的人帮助你。
 
11、自定义Maven本地仓库的位置
可以在运行时指定本地仓库位置:
mvn clean install -Dmaven.repo.local=/home/juven/myrepo/
Maven缺省的本地仓库地址为${user.home}/.m2/repository  。也就是说,一个用户会对应的拥有一个本地仓库。
你也可以自定义本地仓库的位置,修改${user.home}/.m2/settings.xml  :
<settings>    
    ...    
    <localRepository>D:\java\repository</localRepository>    
    ...    
</settings>  
 

12、执行main函数

java -cp target\helloworld-1.0-SNAPSHOT.jar org.marshal.App
 

13、为Web项目增加WTP支持

写道
mvn -Dwtpversion文字颜色=1.0 eclipse:eclipse
 
什么是eclipse wtp 中的wtp
wtp(web tools platform )项目在eclipse平台上进行扩展,是一个开发j2ee web应用程序的工具集。wtp包含以下工具:
* 一个源码编辑器www.ssbbww.com 用来编辑html, javascript, css, jsp, sql, xml, dtd, xsd, 和wsdl。
* 一个图形编辑器用来编辑xsd与wsdl。
* j2ee项目构建器和一个j2ee向导工具。
* 一个web服务创建向导和管理器,和ws-i 测试工具。
* 一个数据库访问,查询工具等。
wtp由两个子项目构成:wst(web标准工具集) 与jst(j2ee标准工具集)8ttt8 wtp是什么意思 是什么东西_什么叫-什么是wtp
wtp支付愿意原则,用于分析社会成员为项目所产出的效益愿意支付的价值。

14、如何定制工程的目录结构

15、在Eclipse中Maven报错:

Maven中无法找 org.apache.maven:maven-artifact:jar:2.0.9,需要手动下载等

写道
Description Resource Path Location Type
Missing:
----------
1) org.apache.maven:maven-artifact:jar:2.0.9

Try downloading the file manually from the project website.

Then, install it using the command:
mvn install:install-file -DgroupId=org.apache.maven -DartifactId=maven-artifact -Dversion=2.0.9 -Dpackaging=jar -Dfile=/path/to/file

Alternatively, if you host your own repository you can deploy the file there:
mvn deploy:deploy-file -DgroupId=org.apache.maven -DartifactId=maven-artifact -Dversion=2.0.9 -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]

Path to dependency:
1) org.apache.maven.plugins:maven-enforcer-plugin:maven-plugin:1.0-beta-1
2) org.apache.maven:maven-artifact:jar:2.0.9
 
解决方案:
1、在eclipse中检查自己使用的 maven版本和eclipse的版本
2、检查eclipse使用的maven的相关配置: Windows -> Preferences -> Maven ->  Installations , 查看 本地user级别settings.xml, global级别settings.xml, 本地仓库

16、mvn assembly:assembly中出现重复的class文件
最近学习Maven遇到一个问题,使用
写道
mvn assembly:assembly
 打包项目里面有重复的class文件,如图:

后来Google了一下也没有找到解决办法,在Maven群里面有人说版本问题,然后就指定了maven-assembly-plugin 插件的版本号,虽然是Beta版的,解决问题就可以了,配置如下:
17、使maven2在下载依赖包的同时下载其源代码包。

使maven2在下载依赖包的同时下载其源代码包的方法:

1. 使用maven命令:mvn dependency:sources 下载依赖包的源代码。
2. 使用参数: -DdownloadSources=true 下载源代码jar。 -DdownloadJavadocs=true 下载javadoc包。

18、生成目录结构
Windows下demo

写道
mkdir src\main\resources,src\test\resources
 
再使用mvn eclipse:eclipse之后,再导入eclipse中(如果已经在eclipse中的,只需要刷新整个eclipse工程即可)

windows下,创建完整的目录结构
写道
mkdir src\main\java\com\alibaba, src\main\resources, src\test\java\com\alibaba,src\test\resources
 

19、仓库依赖查询


20、自动报告的生成:mvn site
<reporting>    
<outputDirectory>target/site</outputDirectory>    
<plugins>    
    <plugin>    
     <groupId>org.codehaus.mojo</groupId>    
     <artifactId>cobertura-maven-plugin</artifactId>    
    </plugin>    
</plugins>    
</reporting> 
 
<plugin>    
<groupId>org.codehaus.mojo</groupId>    
<artifactId>cobertura-maven-plugin</artifactId>    
<configuration>    
    <instrumentation>    
     <!--<ignore>.*</ignore>    
     -->    
     <excludes>    
        <exclude>**/*Test.class</exclude>    
     </excludes>    
    </instrumentation>    
</configuration>    
<executions>    
    <execution>    
     <goals>    
        <goal>clean</goal>    
     </goals>    
    </execution>    
</executions>    
</plugin>    
 
在使用cobertura的时候有一个限制, 就是如果test跟要测试的project是分离的, 换句话说如果test是一个单独的project, 那么这个貌似是没法对被测试的project统计代码覆盖率, 而 clover 则没有这个限制, 要钱的就是不一样啊! 

21、mvn autoconf

  • 描述:autoconfig工具的封装,允许在编译时,或者编译后进行参数配置。
  • 注 意:如果你使用了m2eclipse,发现eclipse进程挂起,请在eclipse.ini文件里面加上 -DinteractiveMode=false,这样eclipse在编译项目的时候就不会执行autoconfig了,需要执行 autoconfig,请在命令行使用mvn autoconf:config
写道
mvn autoconf:autoconf -Dproperties=/home/jiangyr/antx_subscription.properties
 22、mvn帮助插件
写道
help:active-profiles
列出当前构建中活动的Profile(项目的,用户的,全局的)。
help:effective-pom
显示当前构建的实际POM,包含活动的Profile。
help:effective-settings
打印出项目的实际settings, 包括从全局的settings和用户级别settings继承的
配置。
help:describe
描述插件的属性。它不需要在项目目录下运行。但是你必须提供你想要描述插件
的 groupId 和 artifactId。
 eg: mvn help:describe -Dplugin=assembly

23、Maven中的依赖关系查看

写道
mvn dependency:resolve
 

4、忽略测试失败

如果你有失败的单元
测试,但你仍然希望产生构建输出,你就必须告诉 Maven 让它忽略测试失败。 当
Maven 遇到一个测试失败,它默认的行为是停止当前的构建。 如果你希望继续构
建项目,即使 Surefire 插件遇到了失败的单元测试,你就需要设置 Surefire 的
testFailureIgnore 这个配置属性为 true。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
 也可以显示的使用如下命令 mvn test -Dmaven.test.failure.ignore=true



分享到:
评论
1 楼 bukebuhao 2012-07-28  
[FATAL] Non-resolvable parent POM com.alibaba:pampas:4 for com.alibaba.platform.shared:simpleimage:1.1.7: Failed to resolve POM for com.alibaba:pampas:4 due to Missing:
----------
1) com.alibaba:pampas:pom:4
----------
1 required artifact is missing.

for artifact:
  com.alibaba:pampas:pom:4
不知道从哪里下载com.alibaba:pampas

相关推荐

    maven 环境搭建总结

    - **依赖管理**:Maven的依赖管理机制能够自动解决依赖冲突问题,减少手动处理依赖的时间。 - **多模块支持**:Maven支持多模块项目,便于大型项目的组织和管理。 - **社区资源丰富**:Maven拥有庞大的社区支持,...

    maven 3.5.2 maven 3.5.2 maven 3.5.2

    3. **依赖管理**: Maven通过POM自动管理项目的依赖关系,可以避免jar地狱问题,减少手动配置。 4. **生命周期 (LifeCycle)**: Maven有三个主要的生命周期,分别是clean、default和site。default生命周期包含编译、...

    Maven仓库apache-maven-3.2.5

    总结来说,Apache Maven 3.2.5是一个强大而灵活的Java项目管理工具,它通过统一的构建生命周期、依赖管理和仓库机制,简化了项目的构建和维护工作。这个版本在性能和稳定性上做了优化,为开发者提供了更高效、更友好...

    maven.rar apache-maven-3.5.4

    使用Maven,开发者只需在POM.xml中声明项目依赖,Maven会自动下载并管理这些依赖,避免了版本冲突问题。此外,Maven通过约定优于配置的原则,简化了项目结构,使得构建过程标准化。 总结来说,Maven 3.5.4是一个...

    Maven包和遇到的问题总结

    **Maven包与使用问题详解** Maven是Java开发中不可或缺的构建工具,它通过一套规范化的项目管理方式,使得构建、依赖管理和项目信息管理变得简单。本篇将深入探讨Maven的安装、配置以及在实际开发中可能遇到的问题...

    maven API maven API

    总结来说,Maven API是构建Java项目的关键工具,通过其丰富的功能和强大的插件系统,可以高效地管理项目构建、依赖和生命周期。了解并熟练使用Maven API,对于提升开发效率和团队协作具有重要意义。

    maven历史版本下载

    总结来说,Maven 3.5.2作为Maven历史版本之一,提供了性能优化和诸多改进,对于Java开发者来说,理解其特点和下载方式至关重要。通过使用Maven,项目构建过程可以更加规范化和自动化,大大提升了开发效率。因此,...

    Maven3.5.4本地安装包

    总结,Maven 3.5.4作为一款强大的构建工具,提供了标准化的项目管理方式,简化了依赖管理和构建过程,是Java开发中不可或缺的一部分。通过本地安装和配置,开发者可以充分利用Maven的强大功能,提升开发效率和项目...

    Maven知识总结LBY.pdf

    ### Maven知识总结 #### 一、Ant与Maven概述 - **Ant** 和 **Maven** 均为项目的构建工具,在软件开发过程中扮演着重要角色。Ant 是一个早期的构建工具,它提供了灵活的XML配置文件来描述构建流程,但缺乏高级特性...

    Maven学习总结脑图

    maven知识的一些个人梳理,涉及到了Maven的生命周期和命令之类的。

    官方下载maven-3.5.4

    对于开发者来说,选择官方发布的稳定版本,如 Maven 3.5.4,可以避免因为使用早期或者不稳定版本而遇到的问题。 ** Maven 的组成 ** 在提供的压缩包文件中,我们可以看到以下几个关键文件和目录: 1. **LICENSE**...

    nexus构建maven仓库总结(完善版2)

    【标题】:“nexus构建maven仓库总结(完善版2)” 在软件开发过程中,管理依赖库是一项重要的任务,而Nexus作为一个强大的仓库管理器,能够有效地帮助我们完成这一任务。Nexus不仅可以作为代理服务器缓存远程Maven...

    安装的maven3.6.1

    例如,它优化了本地仓库的索引速度,增强了依赖解析的效率,并修复了一些已知的问题,确保了开发者在使用过程中有更好的体验。 ** Maven 的安装 ** 1. **下载**: 首先,你需要从Apache官方网站下载Maven 3.6.1的...

    maven 3.6.3.zip

    2. **依赖管理(Dependency Management)**:Maven通过POM自动管理项目所依赖的库,解决库冲突问题。只需在POM中声明依赖,Maven会自动下载并管理这些库。 3. **生命周期(Lifecycle)**:Maven拥有一个预定义的...

    maven3.6.1和3.6.3安装包

    其中,3.6.3是3.6.x系列中的最新补丁版本,相比3.6.1,它可能包含了更多的安全更新和问题修复。 **安装Maven** 1. **解压**: 首先,你需要解压下载的`apache-maven-3.6.3-bin.zip`或`apache-maven-3.6.1-bin.zip`到...

    maven3.5.4打包文件

    ** Maven 3.5.4 打包工具详解 **...总结来说,Maven 3.5.4 是一个强大的项目管理工具,简化了 Java 开发中的构建和依赖管理。通过合理利用其特性,开发者可以更加高效地管理和构建项目,同时也方便团队协作和代码维护。

    maven项目开发的maven3.3.9使用包

    总结,Maven 3.3.9 是一个强大且稳定的项目管理工具,尤其在SpringBoot这样的现代Java框架中,能够显著提高开发效率和项目的可维护性。通过熟练掌握Maven的使用,开发者可以更加专注于业务逻辑的实现,而不是项目的...

    maven资源 apache-maven-3.3.9-bin.zip

    总结起来,Apache Maven 3.3.9是一个强大的项目管理和构建工具,它通过标准化的构建生命周期和依赖管理,极大地简化了Java项目的开发流程。了解并掌握Maven的使用,对于任何Java开发者来说都是至关重要的,它能够...

    maven搭建工程问题集锦

    ### Maven搭建工程问题集锦 在使用Maven搭建工程项目时,新手可能会遇到各种各样的问题。本文将针对一些常见的问题进行详细的解答,并提供相应的解决方案,帮助大家顺利搭建Maven项目。 #### 一、问题1: Cannot ...

Global site tag (gtag.js) - Google Analytics