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. c#实现数据库的备份

    在.NET开发后天管理系统的时候,数据库的备份功能是必须实现的一块,而在数据库备份方面一句sql语句就可以搞定了,那就是<Backup Database 数据库名To disk='路径\数据库备 ...

  2. checkbox和radio元素的样式设置(简易版)

    html代码 //html <div> <p style="font-size:18px;margin-top:30px;color:rgba(0,0,0,0.44)&qu ...

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

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

  4. const修饰指针+volatile +restrict

    const这块的难点 const修饰指针有以下的几种形式 ,不同的形式 它的意义不一样. 形式1: int a=23: const int *p=&a: a是int型,&a是int * ...

  5. BUG调试: Jump to the invalid address stated on the next line at 0x0: ???

    gdb或者vlagrind报告: ==14569== Jump to the invalid address stated on the next line ==14569== at 0x0: ??? ...

  6. Eclipse使用技巧--自动提示

    window->Preferences->java->Editor->Content Assist 一:Auto activation delay 智能提示反应时间(毫秒) 二 ...

  7. 比较爬虫用的语言Python与Go

    Python是我比较喜欢的语言,莫名的喜欢,对Python的学习可能起初是敲错了网址开始的,哈哈哈~ 工作的任务从一个网站后台做登录.爬取数据,写入服务器Redis中,同事认为我会用PHP来写,哼!让 ...

  8. Windows10 安装QT问题

    在网上download qt-opensource-windows-x86-winrt-msvc2013-5.8.0.exe 版本安装完成后,New “Qt Widgets application” ...

  9. Codeforces Round #162 (Div. 1) B. Good Sequences (dp+分解素数)

    题目:http://codeforces.com/problemset/problem/264/B 题意:给你一个递增序列,然后找出满足两点要求的最长子序列 第一点是a[i]>a[i-1] 第二 ...

  10. shell进程中的特殊状态变量

    $?:获取执行上一个指令的执行状态返回值(0为成功,非0为失败) $$:获取当前执行的shell脚本的进程号(PID) $!:获取上一个在后台工作的进程的进程号 $_:获取在此之前执行的命令或脚本的最 ...