groovy与maven的基础知识不再赘述,以下只描述一些关键点
1.在maven中引入groovy依赖
例:
<properties>
<!--在这里控制groovy 版本 -->
<groovy.version>2.0.8</groovy.version>
<project.build.sourceEncoding>utf8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>${groovy.version}</version>
</dependency>
</dependencies>
${groovy.version}是自己定义的变量,方便修改groovy版本
注意:书写groovy代码时需要建立src/main/groovy/路径,好处是很多关于groovy的插件会默认读取这个路径下的代码。
除了运行时环境,我们还需要引入groovy的编译依赖,以供mvn package时使用。
例:
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<goals>
<goal>execute</goal>
<goal>compile</goal>
</goals>
</execution>
</executions>
<configuration>
<scripts>
<script><![CDATA[// your script here ]]></script>
</scripts>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<!-- any version of Groovy \>= 1.5.0 should work here -->
<!-- 这个变量用来控制groovy编译版本 -->
<version>${groovy.version}</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</plugin>
2.方便快捷的引入本地依赖:
网上有很多方法,最常见的,但是也是最不好用的方式。
例:
<dependencies>
<dependency>
<groupId>com.xiaomi</groupId>
<artifactId>MIPush_SDK_Server</artifactId>
<version>2.2.17</version>
<scope>system</scope> <systemPath>${basedir}/lib/MiPush_SDK_Server_2_2_17.jar</systemPath>
</dependency>
</dependencies>
这种方式有很多缺点,最明显的缺点就是在打包是时候通常无法把这种本地依赖打入jar包中,并且让maven的依赖引入方式变成了两种:
1.本地依赖直接引入。
2.远程下载到本地仓库的依赖引入。
下面推荐一种正确的引入本地依赖的方式:
使用org.apache.maven.plugins插件,将依赖全部加入的本地maven仓库中,这样这些本地依赖就可以像远程依赖一样的被调用了。
例:
<plugins>
<!--本地依赖加入本地仓库插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<executions>
<!--华为推送本地仓库初始化-->
<execution>
<id>oauth2</id>
<!--使用mvn clean时,自动把依赖添加到本地仓库中-->
<phase>clean</phase>
<configuration>
<!--需要加入本地仓库的文件路径-->
<file>${basedir}/lib/client-adapter-sdk-java-oauth2-json-0.3.12.jar</file>
<repositoryLayout>default</repositoryLayout>
<groupId>client-adapter-sdk-java-oauth2-json</groupId>
<artifactId>client-adapter-sdk-java-oauth2</artifactId>
<version>0.3.12</version>
<packaging>jar</packaging>
<generatePom>true</generatePom>
</configuration>
<goals>
<goal>install-file</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
运行 mvn clean 本地依赖就会被加入的本地仓库中了,之后的调用方法就和远程依赖相同了。
例:
<!--华为推送相关依赖-->
<dependency>
<groupId>client-adapter-sdk-java-oauth2-json</groupId>
<artifactId>client-adapter-sdk-java-oauth2</artifactId>
<version>0.3.12</version>
</dependency>
3.关于打包
网上有很多打包方式,都是使用插件的方式进行打包,我试了很多,最终选择了maven-assembly-plugin插件。
优势:使用灵活,功能强大,基本可以解决任何打包需求。
缺点:配置过多。
依赖引入
例:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.rishiqing.PushCenter</mainClass>
<addClasspath>true</addClasspath>
</manifest>
</archive>
<descriptors>
<!--这个是自定义的配置文件,可以进行更详细的参数配置--> <descriptor>/src/main/assembly/src.xml</descriptor>
</descriptors>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<!--指定生命周期-->
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
建立详细配置文件/src/main/assembly/src.xml
例:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>jar-with-dependencies</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<moduleSets>
<moduleSet>
<binaries>
<unpack>false</unpack>
</binaries>
</moduleSet>
</moduleSets>
<dependencySets>
<dependencySet>
<unpack>false</unpack>
<unpackOptions>
<useDefaultExcludes>false</useDefaultExcludes>
</unpackOptions>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>${project.build.outputDirectory}</directory>
</fileSet>
</fileSets>
</assembly>
如果需要了解这个插件的详细配置方法,可以进入官网了解
http://maven.apache.org/plugins/maven-assembly-plugin/usage.html
运行mvn clean package,会在项目/target目录中生成两个打包后的jar包
1.xxxx.jar // 不包含依赖
2.xxxx-jar-with-dependencies.jar // 包含依赖
4.关于新手对于maven标签的使用
注意标签的父子关系
例:
<dependencies>
<dependency>
依赖1
</dependency>
<dependency>
依赖2
</dependency>
</dependencies>
<plugins>
<plugin>
插件1
</plugin>
<plugin>
插件2
</plugin>
</plugins>
加入变量
例:
<properties>
<!--在这里控制groovy 版本 -->
<groovy.version>2.0.8</groovy.version>
<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
</properties>
5.备注
1.关于maven的深入学习方向可以是研究生命周期并且书写自己的maven插件。
2.吐槽:我的这个工程是为了实现移动端推送的功能,研究了很多推送服务商,如:小米推送、极光推送、阿里推送、华为推送等,最终得出的结论是:千万不要使用华为推送!千万不要使用华为推送!千万不要使用华为推送!,重要的事情说3遍!!!