`
fox.tan
  • 浏览: 62059 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Maven 管理不同jdk版本的jar,war,eba

 
阅读更多

在之前的项目中虽然用到了Maven,但 没有用到Maven 中的classifier,因此 发布jdk15和jdk16不同版本的包比较痛苦,jar在Maven的repository无法区别是什么jdk版本。

Maven坐标中的classifier似乎是专门解决不同jdk版本的包而设计的。另外flex中的module也是用classifier来解决的。


原理理论就不多说了,主要记录下来对原来项目做了哪些修改。

    

总的原则是jdk15下的lib不加classifier标记,jdk15和jdk16可以通用的lib不加classifier。只对在jdk16下需要特殊处理的lib加classifier标记。有以下几个jar在jdk16下特殊处理:

  • web-extension
  • war-extension
  • pvm-flow-engine
  • lo-docgen-service
  • lo-snapshot-service

另外jdk16下assembly也要处理,jdk16下被特殊处理过的jar在dependency中要加上classifier标记。

 

Parent pom中的修改:

Parent pom中增加了一个jdk property,这个property为空,也就是默认jdk15情况下jdk标记为空:

    <properties>
        <jdk></jdk>

 

Jar plugin中增加了classifier配置。maven-jar-plugin在打包jar时,如果classifier为空时,生成的jar文件会忽略classifier。

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <classifier>${jdk}</classifier>


                </configuration>
            </plugin>
 


Sub project中的修改:

比如web-extension中在原来的profile中设置了jdk16属性,这样执行mvn命令时加上 -Djre=6时,${jdk}就不再为空,变成了jdk16, maven-jar-plugin打包出jar时就会加上classifier标记jdk16, web-extension-1.1.0.0-SNAPSHOT-jdk16.jar.

        <profile>
            <id>jre6</id>
            <activation>
                <property>
                    <name>jre</name>
                    <value>6</value>
                </property>
            </activation>
            <properties>
                <jdk>jdk16</jdk>


                <manifest.template.name>template.mf.jre6</manifest.template.name>
                <xml.bind.context.factory>com.sun.xml.internal.bind.v2.ContextFactory</xml.bind.context.factory>
            </properties>
        </profile>

 



Dependency
原来pom中的dependency如果有依赖jdk16下特殊处理过的lib(上面那5个),则在dependency中需要加上classifier标记.

 

        <dependency>
            <groupId>com.moodys.loan</groupId>
            <artifactId>web-extension</artifactId>
            <version>${loan.version}</version>
            <classifier>${jdk}</classifier>



        </dependency>
 

 

 

Classifier for EBA

目前打EBA的plugin还不支持classifier,只能采用一些非常规手段解决,下面的方法不是很好,只能将就着用着:

    ......
    <version>${xxx.version}${jdk.eba.classifier}


</version>

    <properties>
        <jdk></jdk>
        <jdk.eba.classifier></jdk.eba.classifier>


        ......

    <profiles>
        <profile>
            <id>jre6</id>
            <activation>
                <property>
                    <name>jre</name>
                    <value>6</value>
                </property>
            </activation>
            <properties>
                <jdk>jdk16</jdk>
                <jdk.eba.classifier>-jdk16</jdk.eba.classifier>


            </properties>
        </profile>
    </profiles>
    ......

 

 

 

 

 


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics