JAVA

maven之profile和classifier

2020-03-30  本文已影响0人  YDDMAX_Y

参考自:https://www.iteye.com/blog/blueram-1611372

根据maven的profile特性可以打出不同的包,并通过classifier特性将包的坐标扩展至groupId-artifactId-version-classifier来进行依赖引用。

指定修改jdk默认版本
修改{M2_HOME}/conf/settings.xml来指定默认的jdk。

<profiles>    
       <profile>      
            <id>jdk-1.6</id>      
            <activation>      
                <activeByDefault>true</activeByDefault>      
                <jdk>1.6</jdk>      
            </activation>      
            <properties>      
                <maven.compiler.source>1.6</maven.compiler.source>      
                <maven.compiler.target>1.6</maven.compiler.target>      
                <maven.compiler.compilerVersion>1.6</maven.compiler.compilerVersion>      
            </properties>      
    </profile>     
 </profiles>    

通常在一些特别情况下,我们需要为单独某一个构件打包多个不同jdk版本的包,用来支持不同的jdk,基于maven我们就可以很方便的做到这点。

1、在项目的pom文件中加入如下配置

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
2.  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
3.  <modelVersion>4.0.0</modelVersion>  
4.  <groupId>cc.mzone</groupId>  
5.  <artifactId>blog</artifactId>  
6.  <packaging>jar</packaging>  
7.  <version>0.1</version>  
8.  <url>http://www.mzone.cc</url>  
9.  <build>  
10.  <plugins>  
11.  <plugin>  
12.  <artifactId>maven-compiler-plugin</artifactId>  
13.  <version>2.0.2</version>  
14.  <configuration>  
15.  <source>${jar.source}</source>  
16.  <target>${jar.target}</target>  
17.  <encoding>UTF-8</encoding>  
18.  </configuration>  
19.  </plugin>  
20.  </plugins>  
21.  </build>  
22.  <dependencies>  
23.  <!-- 这里省略依赖 -->  
24.  </dependencies>  
25.  <properties>  
26.  <!-- 这里省略属性 -->  
27.  </properties>  
28.  <profiles>  
29.  <profile>  
30.  <id>default</id>  
31.  <activation>  
32.  <activeByDefault>true</activeByDefault>  
33.  </activation>  
34.  <properties>  
35.  <jar.source>1.6</jar.source>  
36.  <jar.target>1.6</jar.target>  
37.  </properties>  
38.  </profile>  
39.  <profile>  
40.  <id>jdk15</id>  
41.  <build>  
42.  <plugins>  
43.  <plugin>  
44.  <artifactId>maven-jar-plugin</artifactId>  
45.  <executions>  
46.  <execution>  
47.  <phase>package</phase>  
48.  <goals>  
49.  <goal>jar</goal>  
50.  </goals>  
51.  <configuration>  
52.  <classifier>jdk15</classifier>  
53.  </configuration>  
54.  </execution>  
55.  </executions>  
56.  </plugin>  
57.  </plugins>  
58.  </build>  
59.  <properties>  
60.  <jar.source>1.5</jar.source>  
61.  <jar.target>1.5</jar.target>  
62.  </properties>  
63.  </profile>  
64.  </profiles>  
65.  </project>  

2、然后执行命令打包

    1.  # mvn clean jar  

    3.  # mvn clean jar -P jdk15  
第一条命令打包使用默认的profile,编译的版本是1.6,生成的文件是blog-0.1.jar;而第二条命令打包指定使用jdk15这个profile,编译版本是1.5,生成的文件是blog-0.1-jdk15.jar。

3、项目中引用

    对于项目中的引用,可以使用如下依赖写法:

    1.  <!-- 引用1.6编译版本 -->  
    2.  <dependency>  
    3.  <groupId>cc.mzone</groupId>  
    4.  <artifactId>blog</artifactId>  
    5.  <version>0.1</version>  
    6.  </dependency>  

    8.  <!-- 引用1.5编译版本 -->  
    9.  <dependency>  
    10.  <groupId>cc.mzone</groupId>  
    11.  <artifactId>blog</artifactId>  
    12.  <version>0.1</version>  
    13.  <classifier>jdk15</classifier>  
    14.  </dependency>  

总结分析,为了达到对同一个构件使用不同的编译版本,我们综合使用了maven中的profile、classifier技术,按照我这里给出的例子,做法可以归纳为以下几点:

1、在项目的pom文件中定义多个profile,每个profile规定一个编译版本;

2、在profile中指定插件maven-jar-plugin的classifier配置,这个是指定筛选器的名称,即最后要附加在jar包名称后面的,比如这里的jdk15;

3、打包时指定不同的profile打包不同的版本,通过-P参数指定profile进行编译打包;

4、在其他项目中使用该构件时通过配置classifier属性来筛选不同的版本;
上一篇下一篇

猜你喜欢

热点阅读