linux安装maven

1.下载maven
https://maven.apache.org/download.cgi
2.解压tar包到/usr/local目录:

tar -zxvf apache-maven-3.6.3-bin.tar.gz

3.配置环境变量
vim /etc/profile

JAVA_HOME=/usr/local/jdk
MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

4.修改maven配置文件

cd /usr/local/maven/conf
vim settings.xml
  • 修改maven仓库地址
<localRepository>/usr/local/maven/repository</localRepository>
  • 设置镜像仓库地址为阿里云
  <mirrors>
    <mirror>
      <id>nexus-aliyun</id>
      <mirrorOf>central</mirrorOf>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
  </mirrors>
  • 配置jdk版本
<profile>
      <id>jdk-1.8</id>
      <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
      </activation>
      <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
      </properties>
    </profile>

5.验证是否安装成功

mvn -v

在这里插入图片描述
6.在 JDK 9+ 中,推荐使用 <maven.compiler.release> 替代传统的 <maven.compiler.source><maven.compiler.target>
在 JDK 9+ 中,推荐使用 <maven.compiler.release> 替代传统的 <maven.compiler.source><maven.compiler.target>,主要基于以下原因:

1. 解决跨版本兼容性问题
source/target 的缺陷:

当使用 <source>1.8</source><target>1.8</target> 时,编译器只会确保生成的字节码兼容 Java 8,但不会限制使用 Java 9+ 的新 API。如果代码中误用了高版本 API(如 JDK 11 的 var),编译会通过,但在运行时(若环境是 Java 8)会抛出 LinkageError

release 的严格限制:

<release>8</release> 会同时限制:
• 字节码版本(等同于 target

• 可用的 API 范围(禁止使用 JDK 9+ 的新 API)

• 语言语法检查(禁止使用高版本语法,如 var

示例:

// 如果使用 <release>8</release>,以下代码会编译失败(JDK 10+ 的 `var`)
var list = new ArrayList<String>(); 

2. 避免“类文件版本不一致”问题
target 的局限性:

即使设置 <target>1.8</target>,如果开发者本地用 JDK 11 编译,生成的 .class 文件可能包含高版本格式(如模块化信息),导致在 Java 8 环境运行时出现 UnsupportedClassVersionError

release 的严格一致性:

<release> 会强制编译器生成完全符合指定版本的字节码文件,包括移除高版本特有的元数据(如模块化描述符)。


3. 简化配置
• 传统方式:

需要同时配置 sourcetargetbootstrap classpath(确保使用正确的核心库):

<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.bootclasspath>${java.home}/lib/rt.jar</maven.compiler.bootclasspath>

release 方式:

一行配置解决所有问题:

<maven.compiler.release>8</maven.compiler.release>

4. 支持模块化(JPMS)
如果项目使用 Java 9+ 的模块系统(module-info.java),<release> 能正确处理模块路径(--module-path)和模块化约束,而 source/target 可能引发模块化兼容性问题。


如何迁移?
pom.xml 中的配置:

<properties>
    <!-- JDK 9+ 推荐方式 -->
    <maven.compiler.release>8</maven.compiler.release>
    
    <!-- 传统方式(不推荐) -->
    <!-- <maven.compiler.source>1.8</maven.compiler.source> -->
    <!-- <maven.compiler.target>1.8</maven.compiler.target> -->
</properties>

注意事项:
• 版本号格式:

<release> 使用整数(如 81117),而 source/target 使用 1.811 均可。
• 最低要求:

需 Maven 3.6.0+ 和 maven-compiler-plugin 3.6.0+。
• IDE 兼容性:

IntelliJ/ Eclipse 需同步更新项目配置(可能需要重新导入 Maven 项目)。


总结

特性source/targetrelease
限制字节码版本✔️✔️
限制高版本 API✔️
限制高版本语法✔️
支持模块化部分支持✔️
配置复杂度

结论:在 JDK 9+ 环境中,<release> 是更安全、更简洁的编译选项,能有效避免跨版本兼容性问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值