maven主要知识点
一、配置代理 setting.xml
<proxies> <proxy> <id>optional</id><!--ID--> <active>true</active><!--是否激活 --> <protocol>http</protocol><!--协议 --> <username>proxyuser</username> <!--用户名--> <password>proxypass</password> <!--密码--> <host>proxy.host.net</host><!--主机名 --> <port>80</port><!--端口 --> <nonProxyHosts>local.net|some.host.com</nonProxyHosts><!--不需要代理的主机 可配置多个用|隔开 可使用通配符* --> </proxy> </proxies>
二、配置MAVEN_OPTS环境变量:-Xms128m -Xmx512m
三、命令: mvn clear compile//先清理后编译 ; mvn clear test ;//先清理后测试 mvn clear package;//先清理后打包
mvn clear install;//先清理后安装到本地仓库 mvn clear //清理
四、maven-shade-plugin (代码放在 project-build-plugins)
1.<plugin> 2. <groupId>org.apache.maven.plugins</groupId> 3. <artifactId>maven-shade-plugin</artifactId> 4. <version>1.2.1</version> 5. <executions> 6. <execution> 7. <phase>package</phase> 8. <goals> 9. <goal>shade</goal> 10. </goals> 11. <configuration> 12. <transformers> 13. <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 14. <mainClass>com.blog.HelloWorld</mainClass> 15. </transformer> 16. </transformers> 17. </configuration> 18. </execution> 19. </executions> 20.</plugin>
五、依赖配置
blog-parent.xml
<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> <groupId>com.blog</groupId> <artifactId>blog-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>../blog-admin</module> <module>../blog-central</module> </modules> <name>blog-parent</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <struts.version>2.2.3</struts.version><!--归类依赖 --> </properties> <repositories> <repository> <id>central</id><!--必须唯一(默认中央工厂为central) --> <name>Maven Repository Switchboard</name> <layout>default</layout> <url>http://repo1.maven.org/maven2</url> <releases> <enabled>true</enabled><!-- 开启对releases的支持 --> <updatePolicy>daily</updatePolicy><!-- 检查更新 daily:每天;never:从不检查 interval:X (单位为分钟)为自定义;always每次构建都检查 --> <checksumPolicy>warm</checksumPolicy><!--默认值为warm ignore不输出校验和错误 --> </releases> <snapshots> <enabled>false</enabled><!-- 快照版本不支持下载 --> </snapshots> </repository> </repositories> <distributionManagement> <!-- <repository> <id>proj-releases</id> <name>proj relrases repository</name> <url>http://192.168.1.100/repository/proj-releases</url> </repository> --> <snapshotRepository> <id>Snapshot</id> <name>proj snapshot repository</name> <url>http://localhost:8081/nexus/content/repositories/snapshots/</url> </snapshotRepository> </distributionManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope><!-- 有效范围:编译范围 compile;test测试范围; provided以提供依赖范围(如:servlet-api.jar);runtime 运行时依赖(如:数据库驱动); system系统依赖范围 --> </dependency> <dependency> <groupId>javax.sql</groupId> <artifactId>jdbc-stdext</artifactId> <version>2.0</version> <scope>system</scope> <!-- <optional>true</optional> --><!-- 默认依赖 --> <type>jar</type><!-- 依赖类型 默认是jar --> <systemPath>${java.home}/lib/rt.jar</systemPath> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>${struts.version}</version> </dependency> </dependencies> </project>
blog-admin/pom.xml
<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> <parent> <groupId>com.blog</groupId> <artifactId>blog-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../blog-parent/pom.xml</relativePath> </parent><!-- 继承 --> <!-- <groupId>com.blog</groupId> --> <artifactId>blog-admin</artifactId> <!-- <version>0.0.1-SNAPSHOT</version> --> <!-- <packaging>jar</packaging> --><!--打包方式 默认是jar --> <name>blog-admin</name> <!-- <url>http://maven.apache.org</url> --> <!-- <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> --> <dependencies> <!-- <dependency> <groupId>com.blog</groupId> <artifactId>blog-central</artifactId> <version>0.0.1-SNAPSHOT</version> <exclusions> <exclusion> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> </exclusion> </exclusions> </dependency> --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.8</version> </dependency> </dependencies>
</project>
blog-central/pom.xml
<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> <parent> <groupId>com.blog</groupId> <artifactId>blog-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../blog-parent/pom.xml</relativePath> </parent><!-- 继承 --> <!-- <groupId>com.blog</groupId> --> <artifactId>blog-central</artifactId> <!-- <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> --> <name>blog-central</name> <!-- <url>http://maven.apache.org</url> --> <!-- <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> --> <dependencies> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.1.8</version> </dependency>
<build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.1.2</version> <executions> <execution> <phase>package</phase> <goals><goal>jar-no-fork</goal></goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-rar-plugin</artifactId> <version>2.2</version> <executions> <execution> <phase>package</phase> <goals><goal>rar</goal></goals> </execution> </executions> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>sql-maven-plugin</artifactId> <version>1.5</version> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.18</version> </dependency> </dependencies> <configuration> <driver>${mysql.driver}</driver> <url>${mysql.url}</url> <username>${mysql.username}</username> <password>${mysql.password}</password> <sqlCommand> create database IF NOT EXISTS maven_test </sqlCommand> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>execute</goal> </goals> </execution> </executions> </plugin> </plugins> </pluginManagement> </build>
</dependencies> </project>
六、查看依赖关系的命令:
mvn dependency :list mvn dependency :tree ; mvn dependency :analyze
七、坐标查询网站:http://mvnrepository.com/ http://search.maven.org/ http://www.sonatype.org/
八、配置镜像
setting.xml
<mirrors> <mirror> <id>central</id> <mirrorOf>*</mirrorOf><!--可以配置多个 用逗号隔开 或者用* --> <name>Human Readable Name for this Mirror.</name> <url>http://localhost:8081/nexus/content/repositories/public/</url> </mirror> </mirrors>
十、更新索引
另外一种方法,下载nexus-maven-repository-index.zip解压到nexus的sonatype-work\nexus\indexer\central-ctx目录下
十一、profiles :待补充
十二、配置仓库认证
<servers> <server> <id>blog-snapshot</id> <username>admin</username><!--最高权限 默认是:admin admin123 --> <password>admin123</password> </server> <server> <id>proj-releases</id> <username>admin</username> <password>admin123</password> </server> </servers>
十三、生命周期
Clean生命周期一共包含了三个阶段:
- pre-clean 执行一些需要在clean之前完成的工作
- clean 移除所有上一次构建生成的文件
- post-clean 执行一些需要在clean之后立刻完成的工作
mvn clean 中的clean就是上面的clean,在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行,也就是说,mvn clean 等同于 mvn pre-clean clean ,如果我们运行 mvn post-clean ,那么 pre-clean,clean 都会被运行。这是Maven很重要的一个规则,可以大大简化命令行的输入。
下面看一下Site生命周期的各个阶段:
- pre-site 执行一些需要在生成站点文档之前完成的工作
- site 生成项目的站点文档
- post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
- site-deploy 将生成的站点文档部署到特定的服务器上
这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能,Manager比较喜欢,文档及统计数据自动生成,很好看。
最后,来看一下Maven的最重要的Default生命周期,绝大部分工作都发生在这个生命周期中,这里,我只解释一些比较重要和常用的阶段:
- validate
- generate-sources
- process-sources
- generate-resources
- process-resources 复制并处理资源文件,至目标目录,准备打包。
- compile 编译项目的源代码。
- process-classes
- generate-test-sources
- process-test-sources
- generate-test-resources
- process-test-resources 复制并处理资源文件,至目标测试目录。
- test-compile 编译测试源代码。
- process-test-classes
- test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
- prepare-package
- package 接受编译好的代码,打包成可发布的格式,如 JAR 。
- pre-integration-test
- integration-test
- post-integration-test
- verify
- install 将包安装至本地仓库,以让其它项目依赖。
- deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享。
- (此处转自http://juvenshun.iteye.com/blog/213959)