Maven主要做的是两件事:
1.统一开发规范与工具
1.统一管理jar包
Maven项目的标准目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| src -main –bin 脚本库 –java java源代码文件 –resources 资源库,会自动复制到classes目录里 –filters 资源过滤文件 –assembly 组件的描述配置(如何打包) –config 配置文件 –webapp web应用的目录。WEB-INF、css、js等 -test –java 单元测试java源代码文件 –resources 测试需要用的资源库 –filters 测试资源过滤库 -site Site(一些文档) target -classes 项目主体输出目录 -test-classes项目测试输出目录 -site 项目site输出目录
|
Maven命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| 创建Maven的普通java项目: mvn archetype:create -DgroupId=packageName -DartifactId=projectName
创建Maven的Web项目: mvn archetype:create -DgroupId=packageName -DartifactId=webappName-DarchetypeArtifactId=maven-archetype-webapp
编译源代码: mvn compile
编译测试代码:mvn test-compile
运行测试:mvn test
产生site:mvn site
打包:mvn package
在本地Repository中安装jar:mvn install
清除产生的项目:mvn clean
生成eclipse项目:mvn eclipse:eclipse
生成idea项目:mvn idea:idea
组合使用goal命令,如只打包不测试:mvn -Dtest package
编译测试的内容:mvn test-compile
只打jar包: mvn jar:jar
只测试而不编译,也不测试编译:mvn test -skipping compile -skipping test-compile ( -skipping 的灵活运用,当然也可以用于其他组合命令)
清除eclipse的一些系统设置:mvn eclipse:clean
|
POM基础
1 2 3 4 5 6
| 1.Maven的声明 2.POM的关系,依赖,继承,模块, 属性 3.构建 4.报告 5.项目详细信息 6.环境设置
|
POM的关系补充说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| parent <relativePath/>
父项目的pom.xml文件的相对路径。相对路径允许你选择一个不同的路径。默认值是../pom.xml。Maven首先在构建当前项目的地方寻找父项目的pom,其次在文件系统的这个位置(relativePath位置),然后在本地仓库,最后在远程仓库寻找父项目的pom。 parent使用dependencyManagement定义依赖关系
继承自该项目的所有子项目的默认依赖信息。这部分的依赖信息不会被立即解析,而是当子项目声明一个依赖(必须描述groupID和artifactID信息),如果groupID和artifactID以外的一些信息没有描述,则通过groupID和artifactID匹配到这里的依赖,并使用这里的依赖信息。
<dependencyManagement> <dependencies> <dependency>......</dependency> </dependencies> </dependencyManagement>
<modules> <module></module> <modules/> 模块是这个POM列出的项目,并作为一个组来执行,不需要考虑模块间依赖关系。一个POM打包的项目可以通过将它们列为模块来集合一组项目的构建,这些模块是目录的相对路径或这些项目的POM文件。 (Ps:继承和模块的区别:继承父不知子,但子知父。模块父知子,但子不知父。所以在具体的项目中一般都是继承和模块融合使用)
<properties> <someVar>值</someVar> </properties> 值作为${someVar}, Maven属性是值占位符,就像Ant中的属性一样。它们的值可以在POM中的任何地方通过使用符号${properties}来访问,或者它们可以被插件用作默认值
|
一个典型的pom.xml文件配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| <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.0http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.winner.trade</groupId> <artifactId>trade-core</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>jar</packaging> <classifier>...</classifier> <dependencies> <dependency> <groupId>com.winner.trade</groupId> <artifactId>trade-test</artifactId> <version>1.0.0-SNAPSHOT</version> <scope>test</scope> <optional>false</optional> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <properties> <file.encoding>UTF-8</file.encoding> <java.source.version>1.5</java.source.version> <java.target.version>1.5</java.target.version> </properties> ... </project>
|
构建配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
| <build> <finalName>myPorjectName</finalName> <directory>${basedir}/target</directory> <defaultGoal>install</defaultGoal> <filters> <filter>../filter.properties</filter> </filters> <resources> <resource> <targetPath>resources</targetPath> <filtering>true</filtering> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <excludes> <exclude>jdbc.properties</exclude> </excludes> </resource> </resources> <testResources> <testResource> <targetPath /> <filtering /> <directory /> <includes /> <excludes /> </testResource> </testResources> <sourceDirectory>${basedir}\src\main\java</sourceDirectory> <scriptSourceDirectory>${basedir}\src\main\scripts </scriptSourceDirectory> <testSourceDirectory>${basedir}\src\test\java</testSourceDirectory> <outputDirectory>${basedir}\target\classes</outputDirectory> <testOutputDirectory>${basedir}\target\test-classes </testOutputDirectory> <extensions> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-ssh</artifactId> <version>2.8</version> </extension> </extensions> <plugins> <plugin> <groupId></groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.5.5</version> <executions> <execution> <id>assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> <inherited>false</inherited> </execution> </executions> <configuration> <finalName>${finalName}</finalName> <appendAssemblyId>false</appendAssemblyId> <descriptor>assembly.xml</descriptor> </configuration> <extensions>false</extensions> <dependencies> <dependency>...</dependency> </dependencies> <inherited>true</inherited> </plugin> </plugins> <pluginManagement> <plugins>...</plugins> </pluginManagement> </build>
|
报告
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| <reporting> <excludeDefaults /> <outputDirectory /> <plugins> <plugin> <groupId /> <artifactId /> <version /> <inherited /> <configuration> <links> <link>http://java.sun.com/j2se/1.5.0/docs/api/</link> </links> </configuration> <reportSets> <reportSet> <id>sunlink</id> <configuration /> <inherited /> <reports> <report>javadoc</report> </reports> </reportSet> </reportSets> </plugin> </plugins> </reporting>
|
项目信息配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
| <name>banseon-maven </name> <url>http://www.clf.com/ </url> <description>A maven project to study maven. </description> <prerequisites> <maven /> </prerequisites> <inceptionYear /> <mailingLists> <mailingList> <name> Demo </name> <post> clf@126.com</post> <subscribe> clf@126.com</subscribe> <unsubscribe> clf@126.com</unsubscribe> <archive> http:/hi.clf.com/</archive> </mailingList> </mailingLists> <developers> <developer> <id> HELLO WORLD </id> <name> banseon </name> <email> banseon@126.com</email> <url /> <roles> <role> Project Manager</role> <role>Architect </role> </roles> <organization> demo</organization> <organizationUrl>http://hi.clf.com/ </organizationUrl> <properties> <dept> No </dept> </properties> <timezone> -5</timezone> </developer> </developers> <contributors> <contributor> <name /> <email /> <url /> <organization /> <organizationUrl /> <roles /> <timezone /> <properties /> </contributor> </contributors> <licenses> <license> <name> Apache 2 </name> <url>http://www.clf.com/LICENSE-2.0.txt </url> <distribution> repo</distribution> <comments> Abusiness-friendly OSS license </comments> </license> </licenses> <scm> <connection>scm:svn:http://svn.baidu.com/banseon/maven/</connection> <developerConnection>scm:svn:http://svn.baidu.com/banseon/maven/ </developerConnection> <tag /> <url> http://svn.baidu.com/banseon</url> </scm> <organization> <name> demo </name> <url> http://www.clf.com/</url> </organization>
|
分发配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| <distributionManagement> <repository> <uniqueVersion>true</uniqueVersion> <id> repo-id </id> <name> repo-name</name> <url>file://${basedir}/target/deploy </url> <layout /> </repository> <snapshotRepository> <uniqueVersion /> <id /> <name /> <url /> <layout /> </snapshotRepository> <site> <id> site-id </id> <name> site-name</name> <url>scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web </url> </site> <downloadUrl /> <relocation> <groupId /> <artifactId /> <version /> <message /> </relocation> <status /> </distributionManagement>
|
仓库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| <repositories> <repository> <releases> <enabled /> <updatePolicy /> <checksumPolicy /> </releases> <snapshots> <enabled /> <updatePolicy /> <checksumPolicy /> </snapshots> <id> repo-id </id> <name> repo-name</name> <url>http://192.168.1.169:9999/repository/ </url> <layout> default</layout> </repository> </repositories> <pluginRepositories> <pluginRepository /> </pluginRepositories>
|
profile配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| <profiles> <profile> <activation> <activeByDefault>false</activeByDefault> <jdk>1.7</jdk> <os> <name>Windows XP</name> <family>Windows</family> <arch>x86</arch> <version>5.1.2600</version> </os> <property> <name>mavenVersion</name> <value>2.0.3</value> </property> <file> <exists>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/</exists> <missing>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/</missing> </file> </activation> <id /> <build /> <modules /> <repositories /> <pluginRepositories /> <dependencies /> <reporting /> <dependencyManagement /> <distributionManagement /> <properties /> </profile> </profiles>
|
profile配置项在setting.xml中也有,是pom.xml中profile元素的裁剪版本,包含了id,activation, repositories, pluginRepositories和 properties元素。这里的profile元素只包含这五个子元素是因为setting.xml只关心构建系统这个整体(这正是settings.xml文件的角色定位),而非单独的项目对象模型设置。如果一个settings中的profile被激活,它的值会覆盖任何其它定义在POM中或者profile.xml中的带有相同id的profile。
pom.xml中的profile可以看做pom.xml的副本,拥有与pom.xml相同的子元素与配置方法。它包含可选的activation(profile的触发器)和一系列的changes。例如test过程可能会指向不同的数据库(相对最终的deployment)或者不同的dependencies或者不同的repositories,并且是根据不同的JDK来改变的。只需要其中一个成立就可以激活profile,如果第一个条件满足了,那么后面就不会在进行匹配。
环境配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| <issueManagement> <system> jira </system> <url> http://jira.clf.com/</url> </issueManagement> <ciManagement> <system /> <url /> <notifiers> <notifier> <type /> <sendOnError /> <sendOnFailure /> <sendOnSuccess /> <sendOnWarning /> <address /> <configuration /> </notifier> </notifiers> </ciManagement>
|
来源:https://www.jianshu.com/p/1100a902f525
参考:https://www.jianshu.com/p/fddf23240f81