Maven笔记

Maven笔记

  maven,项目对象模型(POM project object model),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。

坐标(gav)

  groupId:定义当前Maven项目隶属的实际项目。
  artifactId:该元素定义实际项目中的一个Maven项目(模块)。
  version:该元素定义Maven项目当前所处的版本。

Maven中scope参数详解

  scope,配置该依赖的依赖范围。
  Maven坚持惯例优于配置,所以Maven配置中的socpe的默认值是compile。在实际应用过程中经常分不清楚使用哪一个,所以直接就默认了。现在梳理一下Maven的scope:scope分为compile,test,runntime,provided,system五种。

  1. compile
      默认的就是compile,compile表示被依赖项目需要参与当前项目的编译,当然后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去。
  2. test
      test表示依赖项目仅仅参与测试相关的工作,包括测试代码的编译,执行。比较典型的如junit。
  3. runtime
      runtime表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过编译,说实话在终端的项目(非开源,企业内部系统)中,和compile区别不是很大。
  4. provided
      provided意味着打包的时候可以不用包进去,别的设施(Web Container)会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是在打包阶段做了exclude的动作。
  5. system
      从参与度来说,也provided相同,不过被依赖项不会从maven仓库抓,而是从本地文件系统拿,一定需要配合systemPath属性使用。

avatar

scope的依赖传递

  A–>B–>C。当前项目为A,A依赖于B,B依赖于C。知道B在A项目中的scope,那么怎么知道C在A中的scope呢?

  答案是: 当C是test或者provided时,C直接被丢弃,A不依赖C; 否则A依赖C,C的scope继承于B的scope。

avatar

依赖调解

  依赖调解的第一原则是:路径最近者优先。因此X(2.0)会被解析。 如果路径相同,第二原则是:第一声明者优先。在POM中依赖声明的顺序决定了谁会被解析使用,顺序靠前的那个依赖优胜。

聚合和继承:

  • 聚合:一次性构建多个项目,一般通过建立一个额外的空的工程或者一个额外的pom文件 来实现

  • 继承:继承会产生依赖

    • 依赖传递,第一直接依赖,第二直接依赖
    • 依赖调解,路径最近者优先,第一声明者优先
    • 排除依赖
    • 归类依赖,通过设置 <properties></properties> 属性,以变量的方式来控制相关依赖的版本

约定优于配置

生命周期

  • clean
    清理 clean 清理上一次构建生成的文件
  • default
    主要包括:
    • process-source:处理项目主资源文件,一般是对资源文件进行变量替换后,复制到项目输出的主classpath目录中
    • compile:编译项目的主源码
    • test-source:处理项目测试资源文件
    • test-compile:编译项目的测试代码
    • test:使用单元测试框架运行测试,测试代码不会被打包或部署
    • package:接受编译好的代码,打包成可发布的格式,如 jar
    • install:将包安装到maven本地仓库,供本地其他maven项目使用
    • deploy:将最终的包复制到远程仓库,供其他开发人员和maven项目使用
  • site
    • site:生产项目站点文档
    • site-deploy:将生成的项目站点发布到服务器上

maven中的插件仓库

  maven中,区别对待依赖的远程仓库与插件仓库,所以当Maven需要的插件在本地仓库不存在时,就需要配置一个远程的插件仓库。
示例:
  Maven内置的插件仓库配置:

<pluginRepositories>
    	<pluginRepository>
    		<id>center</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>

  阿里云的插件仓库:

<pluginRepositories>
	<pluginRepository>
		<id>public</id>
		<name>aliyun nexus</name>
		<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
		<releases>
			<enabled>true</enabled>
		</releases>
		<snapshots>
			<enabled>false</enabled>
		</snapshots>
	</pluginRepository>
</pluginRepositories>

  示例中,关闭了对 SNAPSHOT 的支持,以防止引入 SNAPSHOT 版本的插件二导致不稳定的构建。一般来说,中央仓库所包含的插件完全能够满足我们的需要,因此也不需要配置其他的插件仓库

pom中的build标签

pluginManagement的配置

  dependencyManagement元素帮助管理依赖,而pluginManagement元素来帮助管理插件,一般在父 pom 中配置。
  在 build 标签下增加如下配置(第一个encoding可省略)

<pluginManagement>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<configuration>
				<source>${java-version}</source>
				<target>${java-version}</target>
				<encoding>UTF-8</encoding>
			</configuration>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-resources-plugin</artifactId>
			<configuration>
				<encoding>UTF-8</encoding>
			</configuration>
		</plugin>
	</plugins>
</pluginManagement> 

跳过测试配置

(版本号可省略)

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

资源文件的打包

  将非默认路径下的资源文件打包到项目中

<resources>			    
        <resource>    
            <!-- 设定主资源目录  -->    
            <directory>src/main/java</directory>    
			<includes>
				<include>**/*.xml</include>
			</includes>  
             
            <!-- 排除如下配置中包含的资源类型文件 -->      
			<excludes>  
				<exclude>**/*.yaml</exclude>  
			</excludes>  

            <!-- maven default生命周期,process-resources阶段执行maven-resources-plugin插件的resources目标处理主资源目下的资源文件时,指定处理后的资源文件输出目录,默认是${build.outputDirectory}指定的目录-->      
            <!--<targetPath>${build.outputDirectory}</targetPath> -->  

        	<!-- maven default生命周期,process-resources阶段执行maven-resources-plugin插件的resources目标处理主资源目下的资源文件时,是否对主资源目录开启资源过滤 -->    
            <filtering>true</filtering>  

        </resource>  			
    </resources>

使用nexus搭建私服

  nexus [ˈnɛksəs] 联结,关系 (nai k sao s )

  私服的作用:jar包可以从私服上面下载,私服上面没有,在通过私服去连接远程仓库下载,可以在私服上面发布自己的私有的jar包

Hudson进行持续构建

m2eclipse

编写maven插件

Archetype

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值