Maven是否支持多版本JAR(MRJAR)包含多Java版本源码?
关于MRJAR项目Maven源码包规范的解答
Maven是否支持多Java版本源码包?
Maven完全支持为MRJAR(多版本JAR)打包包含全版本Java源码的源码包,不存在规范层面的限制。你遇到的Jersey、JUnit相关版本源码包缺失高版本Java源码的问题,是对应项目自身构建配置未适配MRJAR源码打包规范导致的,和Maven本身无关。
高版本Java源码的存放规范
和编译后MRJAR的字节码存放结构对应,源码包中的多版本Java源码需要按照如下路径存放:
- 基线版本(通常是Java 8)的源码直接放在源码包根目录下,按正常包路径存放,比如
org/glassfish/jersey/container/xxx.java - Java 9及以上版本的专属源码,放在
META-INF/versions/<Java主版本号>/路径下,后面跟随对应类的完整包路径。例如:- Java 9专属源码路径:
META-INF/versions/9/org/junit/platform/commons/util/ModuleUtils.java - Java 11专属源码路径:
META-INF/versions/11/org/glassfish/jersey/containers/jetty/http/xxx.java
- Java 9专属源码路径:
如果需要让项目输出符合规范的多版本源码包,只需在maven-source-plugin的配置中添加对应的资源拷贝规则,将项目中src/main/java9、src/main/java11这类分版本源码目录的内容,打包到对应META-INF/versions/路径下即可。目前主流IDE都已适配该源码结构,调试时会自动根据运行时使用的JDK版本加载对应版本的源码文件。
内容的提问来源于stack exchange,提问作者Loren_
相关产品推荐
相关产品推荐

