maven使用详解 项目编码 指定jdk版本 scope含义 配置manifest 拷贝依赖包

2016-04-23 18:50:00
admin
原创 3186
摘要:maven使用详解 项目编码 指定jdk版本 scope含义 配置manifest 拷贝依赖包

一、基本配置及变量

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、不配置resourcesresources不包含子元素默认引入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>

发表评论
评论通过审核之后才会显示。