美文网首页JAVA
maven之profile和classifier

maven之profile和classifier

作者: YDDMAX_Y | 来源:发表于2020-03-30 09:24 被阅读0次

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

    相关文章

      网友评论

        本文标题:maven之profile和classifier

        本文链接:https://www.haomeiwen.com/subject/djjmuhtx.html