1 maven基本概念java
1.1maven是什么web
1)软件项目管理和理解工具
2)项目对象模型(Project Object Model,POM)
3)项目的构建、报告和文档的中心信息apache
1.2maven仓库api
1.3 pom.xml缓存
a)groupId:项目或者组织的惟一标志app
b)artifactId: 项目的通用名称框架
c)version:项目的版本maven
d)packaging: 打包的机制,如pom, jar, maven-plugin, ejb, war, ear, rar工具
1.4 lifecyclepost
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>