win10系统 同时安装支持 jdk 1.7和1.8的切换

本文详细介绍了JDK1.8的下载及安装流程,提供了Oracle官网的下载链接,并指导如何在Windows系统中配置JAVA_HOME、Path、CLASSPATH等环境变量,最后验证Java环境是否配置成功。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jdk 1.8 下载链接: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ,下载之前需要注册登录,比较繁琐。直接上图:

安装步骤我就省略了,一路点击下一步就可以了,接下来主要看配置:

一. 配置 JAVA Home:

分别创建系统变量 jdk1.7和1.8的JAVA_HOME:

JAVA_HOME7 指向安装目录  C:\Program Files\Java\jdk7

JAVA_HOME8 指向安装目录  C:\Program Files\Java\jdk8

JAVA_HOME 可以自由切换为 JAVA_HOME7或8,   指向:  JAVA_HOME   -----> %JAVA_HOME7%

二. 编辑系统变量 Path,然后添加新的变量值, 在win10系统中变量值是分行隔开的,老系统都是一行搞定的。

%JAVA_HOME%\bin

%JAVA_HOME%\jre\bin

三 配置CLASSPATH, 输入变量值,注意前后分号都要带的:    .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;

四 测试运行 java 环境

切换到 jdk 1.8 

D:\Java\jdk-1.8\bin\java.exe -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:51386,suspend=y,server=n -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-Dmanagement.endpoints.jmx.exposure.include=*" -javaagent:D:\Java\Idea\ideaIU-2023.2.win\plugins\java\lib\rt\debugger-agent.jar=file:/C:/Users/lenovo/AppData/Local/Temp/capture.props -Dfile.encoding=UTF-8 -classpath C:\Users\lenovo\AppData\Local\Temp\classpath857402285.jar bpa.BasServiceApplication Connected to the target VM, address: '127.0.0.1:51386', transport: 'socket' SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/D:/Java/Maven/apache-maven-repository/org/slf4j/slf4j-nop/1.7.36/slf4j-nop-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/D:/Java/Maven/apache-maven-repository/org/slf4j/slf4j-jdk14/1.7.36/slf4j-jdk14-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/D:/Java/Maven/apache-maven-repository/ch/qos/logback/logback-classic/1.2.12/logback-classic-1.2.12.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.slf4j.helpers.NOPLoggerFactory] Exception in thread "main" java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.slf4j.helpers.NOPLoggerFactory loaded from file:/D:/Java/Maven/apache-maven-repository/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar). If you are using WebLogic you will need to add 'org.slf4j' to prefer-application-packages in WEB-INF/weblogic.xml: org.slf4j.helpers.NOPLoggerFactory at org.springframework.util.Assert.instanceCheckFailed(Assert.java:702) at org.springframework.util.Assert
最新发布
07-11
<think>我们正在处理一个Java应用程序启动时出现的日志框架冲突问题。错误信息是:`java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath`。根据引用[2][3][4],这个错误通常是因为在类路径中同时存在多个日志框架实现(比如LogbackLog4j2)导致的冲突。 原因分析: 1. 错误信息表明,应用程序尝试使用一个非Logback的LoggerContext(例如Log4j2的LoggerContext),但是Logback的jar包也在类路径中。这会导致SLF4J无法确定应该使用哪个日志框架。 2. 引用[3]提到,具体冲突的jar包可能是`log4j-slf4j-impl`(用于Log4j2与SLF4J的绑定)Logback的jar包(如`logback-classic`)同时存在。 解决方案: 根据引用[3]的建议,我们需要确保只有一个日志框架的实现存在于类路径中。具体步骤如下: 步骤1:检查依赖,排除冲突的jar包 使用Maven的依赖树分析工具(如`mvn dependency:tree`)查看项目中引入的日志框架相关依赖。重点检查: - Logback的依赖:通常由`ch.qos.logback:logback-classic`引入。 - Log4j2的依赖:通常由`org.apache.logging.log4j:log4j-slf4j-impl`引入(用于SLF4J绑定)或`org.apache.logging.log4j:log4j-core`(Log4j2核心)。 步骤2:排除多余的日志框架依赖 假设我们想使用Logback,那么需要排除Log4j2的SLF4J绑定(即`log4j-slf4j-impl`);反之,如果想使用Log4j2,则需要排除Logback的依赖。 例如,如果我们想保留Logback,那么在Maven项目中,可以在引入的依赖中排除Log4j2的绑定: ```xml <dependency> <groupId>某个groupId</groupId> <artifactId>某个artifactId</artifactId> <version>版本</version> <exclusions> <exclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> </exclusion> <!-- 可能还需要排除其他冲突的依赖,根据依赖树分析 --> </exclusions> </dependency> ``` 如果我们想保留Log4j2,那么需要排除Logback的依赖: ```xml <dependency> <groupId>某个groupId</groupId> <artifactId>某个artifactId</artifactId> <version>版本</version> <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> </exclusions> </dependency> ``` 步骤3:检查传递依赖 注意,这些冲突的依赖可能是通过其他依赖传递进来的,因此需要检查整个依赖树,确保所有传递进来的冲突依赖都被排除。 步骤4:清理重新构建 执行`mvn clean install`,并确保构建后的类路径中只有一个日志框架的实现。 步骤5:特殊环境(如WebLogic) 引用[2][4]提到,如果在WebLogic服务器上运行,可能需要在`WEB-INF/weblogic.xml`中添加配置,优先使用应用程序的日志库(即`org.slf4j`)。配置示例: ```xml <weblogic-web-app> <container-descriptor> <prefer-application-packages> <package-name>org.slf4j.*</package-name> </prefer-application-packages> </container-descriptor> </weblogic-web-app> ``` 注意事项: 1. 确保排除操作后,项目中留下的日志框架有完整的支持(例如,使用Logback时,需要`logback-classic``slf4j-api`;使用Log4j2时,需要`log4j-slf4j-impl``log4j-core`等)。 2. 如果使用Spring Boot,默认使用Logback。如果引入`spring-boot-starter-log4j2`,则会切换到Log4j2。因此,确保不要同时引入`spring-boot-starter-logging`(默认Logback)`spring-boot-starter-log4j2`。 示例:在Spring Boot项目中排除默认的Logback并使用Log4j2 在pom.xml中: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> ``` 总结:日志框架冲突的解决关键在于统一类路径中的日志实现,只保留一个。</think>### Java日志框架冲突问题解决方案 您遇到的错误`java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath`是典型的日志框架冲突问题。根本原因是项目中同时存在多个日志实现框架(如LogbackLog4j2),导致SLF4J无法正确初始化[^2][^3][^4]。 #### 解决步骤: 1. **定位冲突依赖** ```bash mvn dependency:tree -Dincludes=ch.qos.logback,org.slf4j,org.apache.logging ``` 检查输出中是否同时包含: - Logback依赖:`ch.qos.logback:logback-classic` - Log4j2依赖:`org.apache.logging.log4j:log4j-slf4j-impl` 2. **排除多余依赖** 在pom.xml中移除冲突实现(二选一): **方案A:保留Logback(推荐Spring Boot项目)** ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 排除Log4j2绑定 --> <exclusions> <exclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> </exclusion> </exclusions> </dependency> ``` **方案B:保留Log4j2** ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 排除默认Logback --> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <!-- 添加Log4j2支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> ``` 3. **验证依赖树** 执行以下命令确认只有一个日志实现: ```bash mvn dependency:tree | grep -E 'logback|log4j' ``` 正常输出应只显示**一种**日志框架的核心包 4. **WebLogic特殊配置(若适用)** 在`WEB-INF/weblogic.xml`中添加: ```xml <container-descriptor> <prefer-application-packages> <package-name>org.slf4j.*</package-name> </prefer-application-packages> </container-descriptor> ``` 5. **清理缓存** ```bash mvn clean install -U ``` #### 预防措施: 1. 使用Maven Enforcer插件防止冲突 ```xml <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <executions> <execution> <id>enforce-logging</id> <rules> <bannedDependencies> <excludes> <exclude>org.apache.logging.log4j:*</exclude> <exclude>log4j:log4j</exclude> </excludes> <includes> <include>ch.qos.logback:logback-classic</include> </includes> </bannedDependencies> </rules> </execution> </executions> </plugin> ``` 2. 统一团队依赖管理规范,避免混合引入日志实现包[^3] > **关键原理**:SLF4J作为日志门面,同一时间只能绑定**一个**具体实现。当检测到多个实现时(如Logback的`StaticLoggerBinder`Log4j2的`Log4jLoggerFactory`并存),就会抛出此异常[^2][^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值