I recently updated my Gradle to 2.13 and it doesn’t work like the previous version that I used. In my build.gradle files, I use the following setting:
sourceCompatibility = 1.6
This is because I’m maintaining a library that should be backwards-compatible. When I was using gradle eclipse command to generate Eclipse project, it used to set compliance level to 1.6 (as expected), and hook up my system Java 8 JRE library, thus generating no warnings.
However, the new Gradle version hooks up JRE System Library [JavaSE-1.6], which generates the following warning:
Build path specifies execution environment JavaSE-1.6. There are no JREs installed in the workspace that are strictly compatible with this environment.
I know how to remove the warning manually (remove the incorrect system library, add default Java 8 system lib), but I want to know if there’s a way of achieving the previous Gradle behavior without
having to modify anything in the IDE itself.
This warning is correct, you are using a Java 8 JDK, which contains classes that are not present in Java 6. As a result you would be able to write code that will not run under Java 6. The correct fix is to add a Java 6 JDK to the Execution Environments in your workspace preferences.
Well, you’re kind of right, but then again - JRE 8 system lib is working just fine and I do get warnings when I use forbidden, post-1.6 features even with the 1.8 system library attached. I think the most important setting is the compliance level of the project.
When you set up the compliance level to 1.6, as far as I know you can use a newer JDK and the jars still get built correctly. I’ve use this setup for quite a while and never experienced any problems.
The thing is: previous Gradle version hooked up my system JRE library, regardless of its level - which was completely fine with me. The new one forces JRE library that I don’t even have, hence the warning.
I found a topic about a similar problem with Maven here, but their proposed solution is attaching the system library manually in IDE. When working with different branches, I usually run the eclipse task after checkout, so I don’t really want to spend my time on manually setting up several projects.
Maybe I should rephrase the question: is there a way to force Gradle to hook up a specific JRE system library when generating a new Eclipse project with the standard eclipse plugin? In my case, I want it to use the library from JRE located at JAVA_HOME rather than forcing a library according to sourceCompatibility setting.
That’s only true for language features, but not for classes. If you have JDK 8 on the classpath, you can access things like java.util.function and you won’t get a warning.
Which was incorrect and caused many users problems.
If you really don’t care about using the correct JDK, you can deactivate this warning in the workspace settings (Java → Compiler → Building → No strictly compatible JRE). I strongly recommend using the correct JDK though.