代码笔记:Maven常用知识点整理

一、maven变量

1.1 内置变量

${basedir} 项目根目录
${project.build.directory} 构建目录,缺省为target
${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes
${project.build.finalName} 产出物名称,缺省为${project.artifactId}-${project.version}
${project.packaging} 打包类型,缺省为jar
${project.xxx} 当前pom文件的任意节点的内容

1.2 自定义变量

<project>   
    ...   
    <properties>   
        <变量名>变量值</变量名>   
    </properties>   
    ...   
    <应用>${变量名}</应用>
</project>

二、maven依赖管理

2.1 maven依赖范围说明

compile: 编译依赖范围(默认),使用此依赖范围对于编译、测试、运行三种 classpath 都有效,即在编译、测试和运行的时候都要使用该依赖jar包;

test: 测试依赖范围,从字面意思就可以知道此依赖范围只能用于测试classpath,而在编译和运行项目时无法使用此类依赖,典型的是JUnit,它只用于编译测试代码和运行测试代码的时候才需要;

provided: 此依赖范围,对于编译和测试classpath有效,而对运行时无效;

runtime: 运行时依赖范围,对于测试和运行classpath有效,但是在编译主代码时无效,典型的就是JDBC驱动实现;

system: 系统依赖范围,使用system范围的依赖时必须通过systemPath元素显示地指定依赖文件的路径,不依赖Maven仓库解析,所以可能会造成建构的不可移植,谨慎使用。

2.2 maven自调节原则

2.2.1 第一声明优先原则

2.2.2 路径近者优先原则

2.3 排除依赖

示例:

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-messaging</artifactId>
			<version>4.1.7.RELEASE</version>
			<exclusions>
				<exclusion>
					<groupId>org.springframework</groupId>
					<artifactId>spring-beans</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

2.4 版本锁定

所谓版本锁定就是指将依赖包的版本固定下来,使任何其他版本定义无效,这种依赖冲突的解决方案是目前实际项目中使用的最多的。
版本锁定使用< dependencyManagement >节点。

需要说明的是< dependencyManagement >节点仅仅起指定依赖包版本的作用,并不会把依赖包传递给子pom,具体需要哪些依赖包仍然是由< dependencies >元内容确定。如果在< dependencyManagement >中指定了依赖包的版本,那么< dependencies>节点设置的< version >将不起作用。

三、maven小技巧应用

3.1 maven使用systemPath引用本地依赖

以 oracle 的 ojdbc7 jar 为例。
将 ojdbc7-12.1.0.1.jar 手工放置到项目目录/src/main/webapp/WEB-INF/lib路径下。
修改pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	...
	<properties>
		<custom.lib-path>${basedir}/src/main/webapp/WEB-INF/lib</custom.lib-path>
	</properties>
	
	<dependencys>
		<dependency>
			<groupId>com.oracle.jdbc</groupId>
			<artifactId>ojdbc7</artifactId>
			<version>12.1.0.1</version>
			<scope>system</scope>
			<systemPath>${custom.lib-path}/ojdbc7-12.1.0.1.jar</systemPath>
		</dependency>
		...
	</dependencys>
	...
</project>

3.2 Maven pom.xml文件获取当前时间戳

<properties>
	<!-- 设置时间格式-->
    <maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
</properties>

<build>
	<!-- 使用 -->
    <finalName>starscream-flood-site-dev-${maven.build.timestamp}</finalName>
</build>

3.3 Maven打包包名带时间戳

			<!--打包时包名添加时间戳-->  
            <plugin>  
                <groupId>org.codehaus.mojo</groupId>  
                <artifactId>buildnumber-maven-plugin</artifactId>  
                <version>1.3</version>  
                <configuration>  
                    <timestampFormat>yyyyMMddHHmmss</timestampFormat>  
                </configuration>  
                <executions>  
	                    <execution>  
	                        <goals>  
	                            <goal>create-timestamp</goal>  
	                        </goals>  
	                    </execution>  
	                </executions>  
	                <inherited>false</inherited>  
	            </plugin>  
	            <!--war包插件-->  
	            <plugin>  
	                <groupId>org.apache.maven.plugins</groupId>  
	                <artifactId>maven-war-plugin</artifactId> 
					<!--
		           <artifactId>maven-jar-plugin</artifactId>  
				   -->
	                <version>2.6</version>  
	                <configuration>  
	                    <warName>${project.artifactId}_${timestamp}</warName>  
	                </configuration>  
	            </plugin>  

3.4 maven指定多个源码目录

<build>
        <plugins>
            <!-- 指定多个源代码目录、多个资源文件目录 -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>1.8</version>
                <executions>
                    <execution>
                        <id>add-source</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>add-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <source>src/main/java</source>
                                <source>src/main/third-part</source>
                            </sources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

3.5 maven assembly插件应用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值