maven笔记

 

学习时笔记,方法自己用时可查阅

资料

 

 

一,pop.xml编写
    1,在pop.xml中以下四个是基本的元素
            modelVsersion           这个在maven2及3来说一般只能是4.0.0
            groupId                     一般为工程名
            artifactId                   工程模块名
            version                     项目版本
 
二,代码目录强制规定
            主代码             : src/main/java/          包名一般与groupId和artifactId相吻合
            主代码资源文件 : src/main/resources/  放如果properties文件等
            默认web资源   : src/main/webapp/     放jsp,html,css

            测试代码                 :src/test/java/    包名一般与groupId和artifactId相吻合
            测试代码码资源文件  :src/test/resources


三,maven的主要命令
       1,常用
            mvn  clear
            mvn  test
            mvn  clear test
            mvn  compile
            mvn  clear compile
            mvn  package
            mvn  package install       当install比package多一个打包安装到本地仓库中
           
           2, 生成项目骨架
              maven 3
                 mvn archetype : generate
              maven 2
                 mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-5:generate
                 实际上运行的是 groupId:artifactId:version:generate
              ... ...
              ... ...

              知识扩展:  按需构建多模块,玩转Maven反应堆

  
四,依赖关系
     1,dependencies结点下dependencie中包含的元素
          groupId,artifactId,version:这三个不再多说
          type         :  依赖的类型,对应项目坐标定义的packaging。大部分情况下,该元素不必声明 ,其默认值 为jar
          scope       :  依赖的范围
          optional    :  标记依赖是否可选
          exclusions : 用来排队传递性依赖

     2,依赖范围(用来控制依赖和三种classpath[编译,测试,运行])
          Compile   : 编译依赖范围,如果没有指定,则默认为此范围,且对于编译,测试,运行三种classpath都有效
          Test        : 这种依赖仅对于测试classpath有效。eg: JUnit
          Provided  : 己提供依赖范围,使用此依赖范围的Maven依赖,仅对于编译和测试classpath有效。eg:serlet-api
          Runtime   : 运行时依赖。这种依赖对于测试和运行有效。eg: JDBC驱动
          System    : 系统依赖。这种与Provided范围完全相同,但使用System范围的依赖时必须通过systemPath元素显示地指定 依赖文件的路径。由于此类依赖不是通过Maven仓库解析的,而且住住与本机系统绑定,可能造成不可移植,因 此应该谨慎使用。systemPath元素可以引用环境变量 需另加:<systemPath>${java.home}/lib/rt.jar</systemPath>

 

 

 

依赖范围 编译    测试    运行     例子
compile   Y Y Y spring-core
test        - Y - JUnit
provided Y Y - servlet-api
runtime - Y Y JDBC驱动
system Y Y - 本地,maven之外的文件

 

 

 

3,传递性依赖   【坚列为第一依赖关系,横项为第二依赖关系,交叉为传递关系】

 

  compile        test      provided        runtime  
compile   compile         - - runtime
test        test              - - test           
provided provided       - provided       provided     
runtime   runtime        - - runtime       

 

 
   4,依赖调解 (不同依赖可能引用相同jar包的不同版本,所以maven要排除情况【下面优先级从高到低】)
         4.1,路径优先原则(最短原则)
         4.2,  第一声明优先(pop.xml中依赖声明顺序,此只适用2.9级以后版本,以下的版本不确定)
 
  5,可选依赖
        定意      :项目A依赖于项目B,B依赖于项目C、D但对于C、D的依赖都是可选依赖,那么C、D对A没有任何影响。
        出现原因 :可能项目B实现了两种特性,一种依赖于C一种依赖于D,但是C与D的特性是互斥的,所以要配制可选。
        pop配制 :<optional>true</optional>
 
  6,排除依赖
        原因       : 可能项目有一个第三方依赖,而第三方依赖由于某些原因依赖了另外一个库的不稳定版本,这个不稳定版本可能 对项目产生不可预料的结果,所以要排除这个依赖。
        pop 配制 :  <exclusions> <exclusion> <groupId>xxx</groupId><artifactId>xxxx</artifactId> </exlusion></exlusions>



  7,归类依赖
       有些包的依赖它们来自同一项目的不同模块,因此它们的版本是一样的。所以可以考虑用
       <properties> <struts.version>2.6</struts.version></properties>   ${struts.version} 等来统一版本号

 8,优化依赖
      查看当前项目己解析的依赖:mvn dependency:list
      查看项目的依赖树            :mvn dependency:tree
      分析当前项目依赖            :mvn dependency:analyze

      打开maven的调式标记     :mvn install -X

 

 

====================2013=============================================

1,插件帮助信息

      1.1.1使用help:describe 目标来获取Maven插件的信息。通过 plugin 参数你可以指定你想要研究哪个插件,你可以传入插件的前缀(如help 插件就是 maven-help-plugin),或者可以是 groupId:artifact[:version] ,这里 version 是可选的。比如, 下面的命令使用 help 插件的 describe 目标来输出Maven Help 插件的信息。

mvn help:describe -Dplugin=help

 

      1.1.2 如果你想要 Help 插件输出完整的带有参数的目标列表,只要运行带有参数
full 的 help:describe 目标就可以了,像这样:

mvn help:describe -Dplugin=help -Dfull

 

        1.1.3 有时候这些信息显得太多了。这时候你可以获取单个目标的信息,设置 mojo 参数和 plugin 参数。下面的命令列出了Compiler 插件的 compile 目标的所有信息

$ mvn help:describe -Dplugin=compiler -Dmojo=compile -Dfull

 

   1.2maven基本插件用法

 

        1.2.1设置插件参数表达式

testFailureIgnore Set this to true to ignore a failure during testing. Its use * Type: boolean
* Required: No
* Expression: ${maven.test.failure.ignore}

    这个表达式可以从命令行通过 -D 参数设置。

$ mvn test -Dmaven.test.failure.ignore=true

 

       1.2.2想要配置 Maven 使其完全跳过单元测试。 可能你有一个很大的系统,单元测试需要花好多分钟来完成,而你不想在生成最终输出前等单元测试完成。只需要使用 Surefire 插件的 skip 参数。 在命令行,只要简单的给任何目标添加maven.test.skip 属性就能跳过测试:

 

$ mvn install -Dmaven.test.skip=true
...
[INFO] [compiler:testCompile]
[INFO] Not compiling test sources
[INFO] [surefire:test]
[INFO] Tests are skipped.

 pom.xml配制

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<skip>true</skip>
				</configuration>
			</plugin>
		</plugins>
	</build>

 

       1.2.3如果你正在实践测试驱动开发(TDD),你可能会使用测试失败来衡量你离项目完成有多远。 如果你有失败的单元测试,但你仍然希望产生构建输出,你就必须告诉 Maven 让它忽略测试失败。 当Maven 遇到一个测试失败,它默认的行为是停止当前的构建。 如果你希望继续构建项目,即使 Surefire 插件遇到了失败的单元测试,你就需要设置 Surefire 的testFailureIgnore 这个配置属性为 true。

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<testFailureIgnore>true</testFailureIgnore>
				</configuration>
			</plugin>
		</plugins>
	</build>

 

 2,pom关于配制数据连接与资源管理信息

 

   2.1 指定maven编译版本与开启pom文件中配制数据库连接

    

	<build>
	<!-- build后的war包名,如果没写则 artifactId.version.packaging -->
	<finalName>practice</finalName>

	<resources>
		<resource>
			<directory>src/main/resources</directory>
			<!-- 这里默认为false,为true时才支持pom.xml文件中配制数据连接信息生效 -->
			<filtering>false</filtering>
		</resource>
	</resources>
	<testResources>
		<testResource>
			<directory>src/test/resources</directory>
			<filtering>false</filtering>
		</testResource>
	</testResources>

    <!-- 编译版本 -->
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<configuration>
				<source>1.6</source>
				<target>1.6</target>
			</configuration>
		</plugin>
	</plugins>

	<pluginManagement>
		<plugins>
			<!--支持src/main/resouces下的二进制文件复制 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<configuration>
					<nonFilteredFileExtensions>
						<nonFilteredFileExtension>dll</nonFilteredFileExtension>
						<nonFilteredFileExtension>so</nonFilteredFileExtension>
						<nonFilteredFileExtension>dylib</nonFilteredFileExtension>
					</nonFilteredFileExtensions>
				</configuration>
			</plugin>
		</plugins>
	</pluginManagement>
</build>

 

   2.2 配制打包时资料文件复制路径
<build>
	<resources>
		<resource>
			<!-- 此处可指定自定义的资料文件路径 -->
			<directory>src/main/java</directory>
			<filtering>false</filtering>
			<includes>
				<include>**/*.properties</include>
				<include>**/*.xml</include>
			</includes>
		</resource>
		<resource>
			<directory>src/main/resources</directory>
			<filtering>false</filtering>
			<includes>
				<include>**/*.properties</include>
				<include>**/*.xml</include>
			</includes>
		</resource>
	</resources>
</build>
 

你可能感兴趣的:(maven)