1  maven基本概念

 1.1maven是什么

1)软件项目管理和理解工具
      2)项目对象模型(Project Object Model,POM)
      3)项目的构建、报告和文档的中心信息

1.2maven仓库

1.3 pom.xml

a)groupId:项目或者组织的唯一标志

b)artifactId: 项目的通用名称

c)version:项目的版本

d)packaging: 打包的机制,如pom, jar, maven-plugin, ejb, war, ear, rar

1.4 lifecycle

  • validate
  • generate-sources
  • process-sources
  • generate-resources
  • process-resources     复制并处理资源文件,至目标目录,准备打包。
  • compile     编译项目的源代码。
  • process-classes
  • generate-test-sources
  • process-test-sources
  • generate-test-resources
  • process-test-resources     复制并处理资源文件,至目标测试目录。
  • test-compile     编译测试源代码。
  • process-test-classes
  • test     使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
  • prepare-package
  • package     接受编译好的代码,打包成可发布的格式,如 JAR 。
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify
  • install     将包安装至本地仓库,以让其它项目依赖。
  • deploy     将最终的包复制到远程的仓库,以让其它开发人员与项目共享。

1.5 常用命令

mvn compile

mvn package

mvn install

mvn clean package -DskipTests

2  maven插件

2.1简介

Maven 是一个执行插件的框架,每一个任务实际上是由插件完成的。Maven 插件通常用于:

  • 创建 jar 文件

  • 创建 war 文件

  • 编译代码文件

  • 进行代码单元测试

  • 创建项目文档

  • 创建项目报告

一个插件通常提供了一组目标,可使用以下语法来执行:

mvn [plugin-name]:[goal-name]

例 mvn compile:compile

2.2 插件解析机制

Maven插件的来源:基本所有主要的maven插件都来自于Apache和CodeHaus,与依赖构件一样,插件构件同样基于坐标存储在Maven仓库中。

在需要的时候,Maven会从本地仓库寻找插件,如果不存在,则从远程插件仓库查找。找到插件之后,再下载到本地仓库使用

maven内置仓库配置如下,关闭了SNAPSHOT

<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Maven Plugin Repository</name>
<url>http://repo1.maven.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
</pluginRepository>
</pluginRepositories>

3  maven常见问题及解决思路

3.1 IDEA提示不能解析配置文件(文件已存在)

出现这个问题的原因在于IDEA没有识别到该配置文件的路径,绝大的原因在于Maven的索引没有该文件 
- 首先, 必须确定该资源文件的路径正确
- 然后, 更新maven的索引:【选择项目】---【右键】---【maven】—【Reimport】

3.2 项目依赖本地jar包(不想install到mvn的repository中),怎么配置? 

<dependency>

    <groupId>com.dtdream.uim</groupId>
    <artifactId>uim-server-sdk</artifactId>
    <version>1.0.4-SNAPSHOT</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/uim-server-sdk.jar</systemPath>
</dependency>

maven 打包的时候默认是不加入依赖的jar包的,所以如果想打出一个独立的可运行的包时,需要加入如下plugin(以打war包为例):

<build>
    <finalName>ipa</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <configuration>
        <webResources>
          <resource>
          <directory>${project.basedir}/lib</directory>
          <targetPath>WEB-INF/lib</targetPath>
          <filtering>false</filtering>
          <includes>
            <include>**/*.jar</include>
          </includes>
          </resource>
        </webResources>
        </configuration>
        <version>2.1.1</version>
     </plugin>
    </plugins>
</build>

3.3 程序中有些单元测试有错误,如何忽略测试步骤

(1) mvn package -DskipTests   不执行测试用例,但编译测试用例生成相应的class文件至target/test-classes下,可以在pom 文件中做如下修改:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.5</version> 
    <configuration> 
      <skipTests>true</skipTests> 
    </configuration> 
</plugin>

(2) mvn package -Dmaven.test.skip=true 不执行测试用例,也不编译测试用例 ,可以在pom文件中做如下修改:

<plugin> 
    <groupId>org.apache.maven.plugin</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.1</version> 
    <configuration> 
      <skip>true</skip> 
    </configuration> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.5</version> 
    <configuration> 
        <skip>true</skip> 
    </configuration> 
</plugin>

3.4 maven类包冲突

1)找到传递依赖的鬼出在哪里?
mvn dependency:tree -Dverbose -Dincludes=[groupId]:[artifactId]:[version]

2)将不想要的传递依赖剪除掉

假设我们不希望asm:asm:jar:1.5.3出现,根据分析,我们知道它是经由org.unitils:unitils-dbmaintainer:jar:3.3引入的,那么在pom.xml中找到这个依赖,做其它的调整:

<dependency> 
    <groupId>org.unitils</groupId> 
    <artifactId>unitils-dbmaintainer</artifactId> 
<version>${unitils.version}</version> 
  <exclusions> 
    <exclusion> 
      <artifactId>asm</artifactId> 
      <groupId>asm</groupId> 
    </exclusion> 
  </exclusions> 
</dependency>

3)清理IDEA缓存

前两个步骤完成之后,还提示有jar包冲突(典型症状是java.lang.ClassNotFoundException或Method不兼容等异常)。这种情况通常是由IEDA缓存造成的,建议Reimport一下maven列表就可以。

3.5 项目发布到远程仓库

<distributionManagement>
    <!-- 发布版本的构件的仓库 -->
        <repository>
        <id>releases</id>
        <name>Releases</name>
        <url>http://maven.dtdream.com/content/repositories/releases/</url>
        </repository>
<!-- 快照版本的仓库-->
    <snapshotRepository>
      <id>snapshots</id>
        <name>Snapshots</name>
        <url>http://maven.dtdream.com/content/repositories/snapshots/</url>
   </snapshotRepository>
</distributionManagement>

2018.5.3 maven的更多相关文章

  1. Maven 项目 无缘无故报错:版本冲突,其他机器上正常-提交的时候报冲突怎么也解决不掉

    2018年: maven突然之间报错了,显示版本冲突,但是其他的机器是好的, 使用命令:mvn compile -P dev -e; 看看测试环境有没有问题,还是有问题.而且,刚开始只是报错:erro ...

  2. SpringBoot系列: Eclipse+Maven环境准备

    这个链接比我写得更全面, http://tengj.top/2018/01/01/maven/ =============================20190115补充: maven 的一些插件 ...

  3. Intellij IDEA 解决 Maven 依赖下载慢的问题

    最近用 IDEA 导入 Hadoop 源码, 但下载依赖特别慢.导致经常需要重启 IDEA 并且下载的过程非常艰难, 网上找了一些方法,各种尝试,终于解决了这个问题.本篇文章总结最关键的两点,希望能帮 ...

  4. IDEA入门及maven配置

    idea基本使用 下载安装 idea下载地址 激活方法 上面的失效使用这个 配置SDKs和编译版本 选择jdk 我是主要用于Java开发,因此配置JDK8 配置编码 其他配置 个人配置主题等 注意 与 ...

  5. idea maven No implementation for org.apache.maven.model.path.PathTranslator was bound.

    查看idea log 2019-11-08 22:30:29,402 [ 475319] ERROR - #org.jetbrains.idea.maven - IntelliJ IDEA 2018. ...

  6. IDEA构建支持cdh版本和scala的maven项目注意事项

    工具和环境 idea2018.1 , scala2.11.8, scala的idea支持包,下载地址 maven3.3.9 win10系统 1.maven环境配置 下载解压maven包,(也可以使用i ...

  7. Maven执行Reimport命令报错:See logs for details

    Idea版本:2018.1.3 maven版本:3.6.2 Idea配置了本地下载的maven之后,不管是直接执行maven的Reimport命令,还是使用idea的Reimport按钮,都会报这个错 ...

  8. 保姆级神器 Maven,再也不用担心项目构建搞崩了

    今天来给大家介绍一款项目构建神器--Maven,不仅能帮我们自动化构建,还能够抽象构建过程,提供构建任务实现:它跨平台,对外提供了一致的操作接口,这一切足以使它成为优秀的.流行的构建工具,从此以后,再 ...

  9. spring boot IDEA 开发微服务(二)

    https://www.cnblogs.com/spaceud/p/8097934.html 参考以上微博,自己实际操作步骤如下: 1~开发准备 JDK:1.8 Spring Boot:2.1.0 S ...

随机推荐

  1. HFun.快速开发平台(二)=》自定义列表实例

    应用系统中数据列表的展现是开发内容之一,实现的方式基本是通过编号具体的访问列表页实现,通过检索条件进行数据源的获取,列字段的描述,还可能会有检索条件的实现,列表数据的导出等功能. 为了将重复工作进行简 ...

  2. php短信验证码接口接入流程及代码示例

    对于绝大部分企业来说,所使用的短信验证码接口都是第三方短信服务商所提供,目前市场上短信服务商有很多,在此向大家推荐一家动力思维乐信,运营13年,值得信赖! 就拿动力思维乐信短信验证码接口为例,详细介绍 ...

  3. react系列笔记:第一记-redux

    前言: 目前公司使用dva,对于前不久还是使用原生js的我来说,花了差不多一两周时间,基本掌握如何使用.虽然对于react有一点点基础,但很多地方未深入,很多概念也很模糊,故从本文开始,记录一下系统的 ...

  4. 初写Linux脚本坑记录

    1.为变量赋值时=前后一定没有空格. 2.赋值时变量为xx,读取才是$xx.如赋值是$xx,则报语法错误.参考 http://www.jb51.net/article/52375.htm 3.脚本每句 ...

  5. ecplise导入项目报错而文件不报错

    第一步 确认项目的jdk和tomcat版本,在Java Build Path的Libraries中查看包是否有报错,按照本机环境进行配置 第二步 检查 Java Compiler中的jdk版本,和ec ...

  6. jsp页面传中文到后台乱码怎么办?

    一般从前台传值到后腰如果传的值是中文的话,又不用post传值方式,到后台显示会显示成乱码的形式.所以以下方法亲测有效防止乱码. 前台jsp页面: var taskTitle = $('#taskTit ...

  7. 文件6. 查找替换.txt文本文件中的内容

    servlet实现对文本文件的查找替换 .jsp界面 <form> <table> <tr> <td>选择文本文件:</td> <td ...

  8. Navicat连接Mysql报错:Client does not support authentication protocol requested by server;

    Navicat连接Mysql报错:Client does not support authentication protocol requested by server: 刚安装Mysql,想用Nav ...

  9. centos7 十万并发 关健配置

    vim /etc/sysctl.conf,添加 --开机启动加载内核参数:fs.file-max = 65535kernel.sem=250 32000 100 128 /proc/sys/kerne ...

  10. Linux 驱动——Button8(输入子系统)

    输入子系统由驱动层.输入子系统核心.事件处理层三部分组成.一个输入事件,如鼠标移动.键盘按下等通过Driver->Inputcore->Event handler->userspac ...