maven笔记

笔记:
	
	1)pom文件中依赖的使用范围<scope>的取值:

		compile		默认值。编译、运行时都可以使用该依赖。该依赖会被打包。

		provided	该依赖在编译时可以用,在运行时不可用,运行时如果容器提供了该依赖,则程序可以使用容器提供的依赖。该依赖不会被打包。

		runtime		该依赖在编译时不可用,在运行时可以使用。

		test		只有在测试编译和测试运行时可用。


		举例:
			<dependency>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-starter-tomcat</artifactId>
				<!-- springboot项目在打包成war包放到tomcat下跑时,需要将该依赖的范围设为provided -->
				<scope>provided</scope>
			</dependency>
		
	2)打包:
		1>进入到工程目录中,按住shift键,然后右键选择"在此处打开命令窗口"(windows)。
		
		2>在命令行中执行命令:
			普通web项目
				打war包:mvn clean package -Dmaven.test.skip=true -P env-prod	
						说明:
							使用mvn package进行编译、打包时,maven会执行src/test/java下的JUnit测试用例,故我们打包时需要跳过执行测试用例这一过程。
						参数:
							-Dmaven.test.skip=true	表示不执行测试用例,也不编译测试用例类。
							-P env-prod				指定打包时使用的配置文件,即指定pom文件中<profile>标签的id属性。 注意:打war包时,一般会指定配置文件;springboot项目中打jar包时一般不会指定配置文件,而是在运行jar包时指定配置文件(.yml文件)。
			
			springboot项目
				打jar包:mvn -U clean package spring-boot:repackage -Dmaven.test.skip=true
						参数:
							-U 	该参数强制让Maven检查所有的SNAPSHOT依赖更新,确保SNAPSHOT依赖是最新的。若不加该参数,Maven默认以天为单位检查更新;
								注意:持续集成的方式开发时,建议加上该参数,因为一天可能会集成多次。
							-X	开启debug模式
						注意:
							若使用 mvn -U clean package -Dmaven.test.skip=true 命令来打包,则必须在pom文件中添加下面的插件,否则启动jar包的时候会报"jar中没有主清单属性"的错误。
							<project>
								<!-- 添加该插件后,打包时会自动执行 spring-boot:repackage 的逻辑-->
							    <build>
							        <plugins>
							            <plugin>
							                <groupId>org.springframework.boot</groupId>
							                <artifactId>spring-boot-maven-plugin</artifactId>
							            </plugin>
							        </plugins>
							    </build>
						    </project>

				启动命令:nohup java -jar -Dfile.encoding=UTF-8 applicationName-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev >> ./web.log 2>&1 &


		3>在工程目录的target文件夹中,我们就可以看到刚才打的war包或jar包了。

	3)发布:将jar包发布到mvn仓库:
		mvn clean source:jar deploy -Dmaven.test.skip=true

	4)只运行单测:
        mvn clean test -Dspring.profiles.active=test
        或 
        mvn clean test -U

	5) 通过mvn命令,直接将依赖下载到本地仓库:
		mvn dependency:get -Dartifact=groupId:artifactId:version:jar:sources


常见问题:


	1)idea中,子模块在Maven视图下看不到。
	解决:子模块的pom.xml文件右键-Add As Maven Project

    
    2)pom有删除线、变灰色,检查父工程的pom确认该模块已被引用,但是IDEA标记被删除。
    解决:依次打开File | Settings | Build, Execution, Deployment | Build Tools | Maven | Ignored Files 把对应子模块的勾去掉即可。



常见错误:

	【错误1】
		org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:
		[FATAL] Non-resolvable parent POM: Could not find artifact com.jxn.parent:jxn-parent:pom:0.0.1-SNAPSHOT and 'parent.relativePath' points at wrong local POM @ line 4, column 10
		解析:
			无法解析父级的POM文件。
		说明:
			当设置了<parent/>时,是需要有一个relative path来查找父项目的pom.xml的,而如果没有,那么默认的父项目pom.xml就在该pom.xml的父附录中。如果没有,就会根据groupId和artifactId在本地和远端maven仓库中找。

		解决方法:
			方法一:由<relativePath>../../pom.xml</relativePath>指定正确的父pom路径,默认为../pom.xml
			方法二:将父项目安装到本地仓库中:选中父项目,右键选择Run As -- Maven install
		
		
	【错误2】
		Project build error
		分析:更新的jar包中,缺少这个包,重新加载一次:
		
		解决方案:
			1)选中项目,先project----->clean一下
			2)选中项目,Debug AS ----->maven clean
			3)加载pom里的jar,Debug AS------>maven INSTALL
		
		
	【错误3】
		从SVN上检出的pom.xml文件报错。
		Could not calculate build plan:xxx or its dependencies could not be resolved: Failed to read artifact descriptor for xxx.jar
		
		
		或者报 Cannot resolve symbol 'ClassName'(无法解析某一个类) 的错误。
		
		
		分析:
			由于网络原因没有将Maven的依赖下载完整,出现了*.lastUpdate文件,导致无法重新下载完整的依赖。
			
		解决方案:
			1)删除所有以.lastUpdate结尾的文件
                windows:
				    a)切换到maven的本地仓库(D:\repository)
				    b)在当前目录打开cmd命令行
				    c)执行命令:for /r %i in (*.lastUpdated) do del %i
                mac:
                    find ~/.m2/repository -name "*.lastUpdated" | xargs rm
			2)在项目上执行 Maven Update

		补充:如果从网络上下载jar包比较慢,则可以考虑使用开源中国的私服:http://maven.oschina.net/help.html 来下载。
		
		


		
		

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值