一. IDEA安装使用中的常见问题及解决方法列表
1、Error:java: 错误: 不支持发行版本 5:
在使用IDEA编写一个java WEB Maven项目运行的时候提示报错 Error:java: 错误: 不支持发行版本 5,原来IDEA编辑器在运行的时候默认选择了jdk5版本,需要修改两个地方:
在Intellij IDEA中点击File -->Project Structure,检查Project和Module两个地方Java版本是否与本地一致。Project选项这里有问题的可能性较小,但Module选项卡里的版本注意看下,我的问题就是出在这里,这里都默认选择了1.5的版本,包括项目和其下的module以及选项卡中的:Project Bytecode version。都修改和本地一致的JDK版本。
上面的修改只是对当前的项目起了作用,要想让整个IDE以后都选择正确的版本,可通过点击Settings->Bulid, Execution,Deployment->Java Compiler,将Target bytecode version设置为本地Java版本。
2、idea output输出内容中文乱码:
解决方法:修改启动参数,找到Intellij安装目录\bin\idea.exe.vmoptions(IDEA的安装目录),在末尾加上启动Intellij的参数,-Dfile.encoding=UTF-8;或者点击IDEA的Help菜单,选择Edit Custom VM options,在末尾添加 -Dfile.encoding=UTF-8。修改后重启Intellij即可。
3、Java三元运算Type mismatch: cannot convert from int to boolean:
Java在进行三元运算符的运算时需要注意,其条件判断表达式必须是一个布尔类型值,而不能是其它的类型,不然就会报错不能将其它类型转为布尔类型。比如Type mismatch: cannot convert from null to boolean、Type mismatch: cannot convert from int to boolean其它等,在有的语言比如PHP中可以自动将前面的值进行转换判断,但在JAVA 中不能,例如:
//在元表达式结构
//variable x = (expression) ? value if true : value if false
int i =1;
//错误的写法
int flag = (i % 2 ) ? 1:-1;
//正确写法
int flag = (i % 2 == 1 ) ? 1:-1;
就会报错Type mismatch: cannot convert from int to boolean,即不能将i%2求余的值(整数)转换成布尔值,正确的写法要对上面的求余值进行判断以最终是一个布尔值结果。
二. IDEA中Maven工程Language Level默认为5导致不支持
IDEA中Maven工程Language Level默认为5导致(错误: 不支持发行版本 5)的问题及使用lombok仍然标红解决.
在使用IDEA建立Maven工程project后,发现每次新建一个module都会导致之前设置的project structer->Language Level的值都重新变成了5版本(之前已经修改过所有module),这个问题是出在maven的Language Level默认为5的原因上。需要编辑project的pom.xml,并指定Java版本。添加如下内容(两种方式都可以,我同时都加上了)。此处可参考上面第二段。新建一个module后就会碰到报错:IDEA:Error:java: 错误: 不支持发行版本 5;当时是通过修改项目结构来解决的,但发现那样并没有真正解决,新建一个module后又会恢复到5版本。而添加下面配置后就能彻底解决这个问题:
<!--添加方式1-->
<properties>
<!--指定Java版本-->
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<!--添加方式2-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<!--指定Java版本-->
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>
</build>
为了减少项目代码中大量的如get,set,构造器方法等冗余代码,特别是在使用spring框架时需要大量的set方法,可以使用lombok进行自动快速生成,添加好lombok依赖后只需要在class上注解@Data 即能让代码在编译的时候自动生成get,set,以及构造方法。
但在idea工具中使用lombok的时候发现使用了lombok注解,但在idea中仍然显示有编译错误的红色标记(并不影响代码的执行),比如类没有提供构造方法,在进行new操作时仍然标红,原因是项目依赖的lombok包虽然加载,但还需要安装lombok插件。
进入file->setting->Plugins->搜索lombok,安装IntelliJ Lombok plugin 插件即可。
三. IDEA报WARN: log4j:WARN Please initialize the log4j
IDEA运行时报WARN: log4j:WARN Please initialize the log4j system properly的解决办法
之前已经加载了log4j包,之后在运行的时候发现总有这个提示。
log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory).
log4j:WARN Please initialize the log4j system properly.
看提示的意思是需要对log4j的配置进行一些初始化,于是我也把配置文件也放到src/main/resources中了,但是运行时还是依然报这个警告。
后来去查看了一下target目录classes下的内容,发现并没有log4j.prperties,而mybatis中的配置和db配置文件都正常。如果我直接复制log4j.prperties文件到target下classes目录中,就不会报错,但这不是正常的解决办法。但我运行时并不会自动把log4j.properties文件copy到target目录中去,检查项目结构project structer也正常,resource folder也正确。如下图。
于是琢磨是不是运行不能重新将这些resources下的文件编译呢,找了找IDEA上的各个功能菜单,试了试很多个,最后发现build->Rebuild Project工具有用,试了一下,果真运行后target下有了log4j.prperties文件。问题解决!
四. IDEA中用maven打包遇到的错误及解决方法小记
maven打包时遇到File encoding has not been set问题,详细报错File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent! 。需要在项目pom.xml文件中增加如下配置项即可:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
打包的时间碰到报WARNING
[WARNING] /D:/javaidea/api....java: 某些输入文件使用了未经检查或不安全的操作。
[WARNING] /D:/javaidea/api....java: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
一我试了试可以通过在类上面添加 注解:@SuppressWarnings("unchecked") 抑制warning解决。不过另外我看了一下代码,发现在类的属性上我进行了@Autowired 注入。此处有提示:Field injection is not recommended,看来不建议使用属性注入。
可以把这个注解去了添加lombok的Data注解和AllArgsConstructor注解,以通过对象构造时注入属性,这样也不会再报上面的提示了。
打包编译时报错:Error:java: 无效的目标发行版: 11
之前开发的时候我使用的是11,准备放到服务器上需要改成8,我已经改了project structer中的很多的地方为8、以及tomcat configuration中的JDK版本,但还需要修改file->setting->JAVA compiler中的target java 版本。
最后记一个我在运行springBoot的时候遇到一个错误,详细如下:
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'company' defined in file [D:\javaidea\bootproject\target\classes\com\kermit\bootproject\pojo\Company.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.lang.String' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.lang.String' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
提示没有找到NoSuchBeanDefinition 原因是springIOC容器加载bean默认使用无参构造进行初始化。因此需要加一个默认的无参构造方法即可。扩展一下:Spring实例化bean有四种方式:无参构造方法实例化(Spring默认)、静态工厂实例化、实例化工厂实例化、注解方式实例化。