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. php 面向对象二

    多态: 多态就是多种形态:多态分为方法重写和方法重载,但是php不支持方法重载 重写: 子类和父类的方法名必须一致,严格标准要求参数必须一致,但是参数可以不一致 子类中覆盖的方法不能比父类的方法访问权 ...

  2. HIbernate常见异常(转载)

    SSH阶段常见的异常系列之一hibernate(15条) 异常一 异常一 异常描述: Sax解析异常:cvc-复杂的类型,发现了以元素maping开头的无效内容,应该是以 ‘{“http://www. ...

  3. [线段树]HDU-1754板子题入门ver

    HDU-1754 线段树数组请开到四倍 众所周知数组开小会导致re tle wa等一系列问题orz 板子就是板子,数组从零开始或是从一开始都没什么问题,就是2*root+1还是2*root+2的问题. ...

  4. 电子签名在K2中的应用

    全球越来越多的企业开始使用电子签名(即eSignatures),在减少碳排放的同时简化业务流程,提高文档安全性,便于记录保存,并降低企业成本.在美国法律下,电子签名具备等同于手写签名的法律效力. 什么 ...

  5. flask 第七章 简陋版智能玩具 +MongoDB初识和基本操作

    1.简陋版web智能玩具 FAQ.py文件 import os from aip import AipSpeech, AipNlp from uuid import uuid4 "" ...

  6. 网络请求get和post的区别

    网络请求get和post的区别 其实本文更应该放在HTTP相关的分类,但是目前我并没有开设这一个分类专栏,so临时储存在HTML分类吧 Get和post是HTTP请求的两种基本方式 get是从服务器上 ...

  7. elasticsearch基本使用

    elasticsearch 是java对lucence的封装,所以需要事先安装java. 它适用于全文索引,便捷的分布式,主要原理就是倒排索引.一般搜索某个关键字,是通过在一篇篇文章中查找这个关键字, ...

  8. swiper使用中一些点的总结

    最近做了PC端改版,要求移动端有更好的体验,一些产品滚屏的展示,就用了swiper插件,以方便用户在移动端访问可以滑动翻屏展示. 本次项目中使用的是swiper2.0版本. 首先要引入swiper的j ...

  9. 字符串的顺序倒置。(Reverse)

    实际遇到的问题:在串口获取码表数据的时候,有的码表传到电脑上的数字顺序是颠倒的,即:123.45,会显示为54.321.需要重新处理数据.方法很多,也不难实现,现在列举其中5个. public str ...

  10. linux 迁移项目ProtocolException

    背景:服务器跟换机房,虚拟机完整迁移项目,只修改ip和主机名 1.检查/etc/hosts 中ip 和主机名映射 2.检查网络端口是否有限制以及端口开放是否全了,检查ip有没有配对.RMI注册不上.