maven使用详解 项目编码 scope字段含义 指定jdk版本 配置manifest 拷贝依赖包
- 2016-04-23 18:50:00
 - admin
 - 原创 3795
 
一、基本配置及变量
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>
三、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>
四、指定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配置;
五、包含和排除文件
1、resources比plugin包含和排除文件更通用;
2、resources不包含子元素默认引入src/main/resources,不配置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>
六、jar-plugin配置manifest
addClasspath:增加依赖路径到classpath;
classpathPrefix:增加依赖的通用前缀;
mainClass:设置运行主类;
manifestEntries:增加key-value,本例修改classpath;
manifestEntries:3.4.0版本插件增加的classpath放在依赖前面;
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.4.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>
七、dependency-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>
八、assembly-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>