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属性来筛选不同的版本;