maven使用详解 项目编码 指定jdk版本 scope含义 配置manifest 拷贝依赖包
- 2016-04-23 18:50:00
- admin
- 原创 3186
一、基本配置及变量
1、name、description、url是工程描述信息,非必要;
2、build.finalName是打包名称,用于强制修改包名;
3、配置示例:pomdemo.xml
内置变量:
1、basedir,工程目录;
2、project.basedir,工程目录;
3、project.element,项目元素的值,比如project.name;
4、maven.build.timestamp,项目开始构建时间;
定义属性优先级:-D定义属性 > pom的profile定义属性 > pom定义属性。
<properties>
<username>feinenxiang</username>
</properties>
二、设置项目编码(windows默认GBK)
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
三、指定jdk版本
修改plugin配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
或修改settings文件:
<profile>
<id>myProfile</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
或修改pom文件:
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
maven-compiler-plugin配置:fork和executable用于使用外部编译器,默认使用内置编译器,skip禁止编译测试代码;
maven-toolchains-plugin作用:加载toolchains.xml配置文件,指定插件要使用的JDK版本,比如编译插件;
eclipse中update project影响:会设置JRE System Library到对应版本的Excution Environment;
优先级:plugin配置 > toolchains配置 > settings配置 > pom配置;
四、dependency的scope字段含义
1、compile,缺省值,用于所有阶段,随着项目一起发布,并且依赖传递;
2、provided,类似compile,但运行时由JDK或容器提供依赖,依赖不传递;
3、runtime,用于运行和测试阶段,如JDBC驱动,并且依赖传递;
4、test,只用于编译和运行测试代码,不随项目发布,且依赖不传递;
5、system,类似provided,需要显式提供依赖文件,不会在仓库中查找它;
6、optional=true,表示依赖不随项目发布,且依赖不传递;
依赖本地库:
<dependency>
<groupId>com.sun.jmdk</groupId>
<artifactId>jmxtools</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/jmxtools.jar</systemPath>
</dependency>
五、包含和排除文件
1、resources比plugin包含和排除文件更通用;
2、不配置resources或resources不包含子元素默认引入src/main/resources;
3、resource默认引入目录所有资源,exclude优先级高于include,filtering用于变量替换;
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<excludes>
<exclude>*.properties</exclude>
</excludes>
</configuration>
</plugin>
六、配置manifest
addClasspath:增加依赖路径到classpath;
classpathPrefix:增加依赖的通用前缀;
mainClass:设置主类;
manifestEntries:增加特殊key-value,本例修改classpath,增加的classpath放在依赖后面;
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>../lib</classpathPrefix>
<mainClass>mina.MinaDemo</mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
七、拷贝所有依赖包
phase,哪个阶段执行拷贝动作;
outputDirectory,拷贝到哪个目录;
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<includeScope>system</includeScope>
<outputDirectory>lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
八、发布打包
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>logdemo.LogDemo</mainClass>
</manifest>
</archive>
<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>