Skip to content

Gradle Project shall use the Java from the tooling not runtime.#7024

Merged
lkishalmi merged 1 commit intoapache:masterfrom
lkishalmi:gradle-bootclasspath
Mar 25, 2024
Merged

Gradle Project shall use the Java from the tooling not runtime.#7024
lkishalmi merged 1 commit intoapache:masterfrom
lkishalmi:gradle-bootclasspath

Conversation

@lkishalmi
Copy link
Contributor

Gradle Java tooling is the recommended way to set the Java version for source sets since provably version 7.x. Java Tooling has been introduced in Gradle 6.7. In order to be able to split the Java compilation form the java runtime.

NetBeans haven't respected the tooling version from Gradle so far, rlied on that people would use the same tooling as runtime. This really needed to be fixed.

@lkishalmi lkishalmi force-pushed the gradle-bootclasspath branch from 4ebe5a2 to a3c6b40 Compare February 5, 2024 07:41
@lkishalmi lkishalmi added the Gradle [ci] enable "build tools" tests label Feb 5, 2024
@lkishalmi lkishalmi added this to the NB22 milestone Feb 5, 2024
@lkishalmi lkishalmi marked this pull request as ready for review February 5, 2024 07:48
@lkishalmi
Copy link
Contributor Author

The Java Dependencies node in Java projects was removed.
image

The Java Platform is displayed per source group in the project Properties Sources:
image

@lkishalmi
Copy link
Contributor Author

Did some limited testing on Java 20, and Java 21 as toolchains with Gradle 8.3 and Gradle 8.4 running NetBeans with Java 21

@sdedic
Copy link
Member

sdedic commented Feb 5, 2024

I wonder if some more integration with NB IDE would be useful: suggest to install gradle-detected JVMs as java platforms into the IDE, or pass Java platforms configured in the IDE to the gradle build to choose from.

@mbien
Copy link
Member

mbien commented Feb 5, 2024

please make sure that tests don't start to install JDKs

edit: what i mean by that is that existing tests should not suddenly start setting up their own env

@lkishalmi lkishalmi force-pushed the gradle-bootclasspath branch from a3c6b40 to f42ce9a Compare February 5, 2024 21:33
@lkishalmi
Copy link
Contributor Author

please make sure that tests don't start to install JDKs

edit: what i mean by that is that existing tests should not suddenly start setting up their own env

This PR has no effect on the existing tests.

@sdedic
Copy link
Member

sdedic commented Feb 19, 2024

Would it be possible to retain the java platform node, provided that all source groups share the same JDK setting ? Removal would make the project view inconsistent compared to Maven project view -- there is also "Java Depenendencies" node that shows the JDK.

maven-project

@lkishalmi lkishalmi force-pushed the gradle-bootclasspath branch from f42ce9a to 272d75c Compare February 26, 2024 21:32
@lkishalmi
Copy link
Contributor Author

Well, @sdedic I've put that node back.

image

@sdedic
Copy link
Member

sdedic commented Feb 26, 2024

Thanks !

@lkishalmi lkishalmi force-pushed the gradle-bootclasspath branch from 272d75c to e65cadf Compare February 27, 2024 00:22
@lkishalmi
Copy link
Contributor Author

It seems the paperwork check needs #7117

@lkishalmi
Copy link
Contributor Author

The build is finally green now. If no one objects, I'm going to merge this tomorrow!

Copy link
Member

@mbien mbien left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ran a quick test and it seems to be working fine. Code looks good to me.

on first attempt I had an outdated org.gradle.java.home in my global gradle.properties which caused an exception during new project creation (since the deamon couldn't start) and the dialog simply closed:

Details
SEVERE [org.openide.util.Exceptions]
java.lang.IllegalArgumentException: Value '/home/mbien/dev/java/jdk-17.0.10.7.1-corretto' given for org.gradle.java.home Gradle property is invalid (Java home supplied is invalid)
	at org.gradle.internal.buildoption.Origin$GradlePropertyOrigin.handleInvalidValue(Origin.java:58)
	at org.gradle.launcher.daemon.configuration.DaemonBuildOptions$JavaHomeOption.applyTo(DaemonBuildOptions.java:137)
	at org.gradle.launcher.daemon.configuration.DaemonBuildOptions$JavaHomeOption.applyTo(DaemonBuildOptions.java:126)
	at org.gradle.internal.buildoption.StringBuildOption.applyFromProperty(StringBuildOption.java:44)
	at org.gradle.internal.buildoption.BuildOptionSet$2.convert(BuildOptionSet.java:64)
	at org.gradle.tooling.internal.provider.ProviderConnection.initParams(ProviderConnection.java:305)
	at org.gradle.tooling.internal.provider.ProviderConnection.run(ProviderConnection.java:135)
	at org.gradle.tooling.internal.provider.DefaultConnection.getModel(DefaultConnection.java:149)
	at org.gradle.tooling.internal.consumer.connection.CancellableModelBuilderBackedModelProducer.produceModel(CancellableModelBuilderBackedModelProducer.java:54)
	at org.gradle.tooling.internal.consumer.connection.PluginClasspathInjectionSupportedCheckModelProducer.produceModel(PluginClasspathInjectionSupportedCheckModelProducer.java:38)
	at org.gradle.tooling.internal.consumer.connection.AbstractConsumerConnection.run(AbstractConsumerConnection.java:64)
	at org.gradle.tooling.internal.consumer.connection.ParameterValidatingConsumerConnection.run(ParameterValidatingConsumerConnection.java:49)
	at org.gradle.tooling.internal.consumer.DefaultBuildLauncher$1.run(DefaultBuildLauncher.java:97)
	at org.gradle.tooling.internal.consumer.DefaultBuildLauncher$1.run(DefaultBuildLauncher.java:89)
	at org.gradle.tooling.internal.consumer.connection.LazyConsumerActionExecutor.run(LazyConsumerActionExecutor.java:143)
	at org.gradle.tooling.internal.consumer.connection.CancellableConsumerActionExecutor.run(CancellableConsumerActionExecutor.java:45)
	at org.gradle.tooling.internal.consumer.connection.ProgressLoggingConsumerActionExecutor.run(ProgressLoggingConsumerActionExecutor.java:61)
	at org.gradle.tooling.internal.consumer.connection.RethrowingErrorsConsumerActionExecutor.run(RethrowingErrorsConsumerActionExecutor.java:38)
	at org.gradle.tooling.internal.consumer.async.DefaultAsyncConsumerActionExecutor$1$1.run(DefaultAsyncConsumerActionExecutor.java:67)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused: org.gradle.tooling.GradleConnectionException: Could not execute build using connection to Gradle distribution 'https://services.gradle.org/distributions/gradle-8.6-bin.zip'.
	at org.gradle.tooling.internal.consumer.ExceptionTransformer.transform(ExceptionTransformer.java:55)
	at org.gradle.tooling.internal.consumer.ExceptionTransformer.transform(ExceptionTransformer.java:29)
	at org.gradle.tooling.internal.consumer.ResultHandlerAdapter.onFailure(ResultHandlerAdapter.java:43)
	at org.gradle.tooling.internal.consumer.async.DefaultAsyncConsumerActionExecutor$1$1.run(DefaultAsyncConsumerActionExecutor.java:69)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	at java.base/java.lang.Thread.run(Thread.java:1583)
	at org.gradle.tooling.internal.consumer.BlockingResultHandler.getResult(BlockingResultHandler.java:46)
	at org.gradle.tooling.internal.consumer.DefaultBuildLauncher.run(DefaultBuildLauncher.java:83)
[catch] at org.netbeans.modules.gradle.spi.newproject.TemplateOperation$InitStep.execute(TemplateOperation.java:321)
	at org.netbeans.modules.gradle.spi.newproject.TemplateOperation.run(TemplateOperation.java:117)
	at org.netbeans.modules.gradle.spi.newproject.BaseGradleWizardIterator.instantiate(BaseGradleWizardIterator.java:76)
	at org.openide.loaders.TemplateWizard$InstantiatingIteratorBridge.instantiate(TemplateWizard.java:1048)
	at org.openide.loaders.TemplateWizard.handleInstantiate(TemplateWizard.java:602)
	at org.netbeans.modules.project.ui.NewProjectWizard.handleInstantiate(NewProjectWizard.java:51)
	at org.openide.loaders.TemplateWizard.instantiateNewObjects(TemplateWizard.java:436)
	at org.openide.loaders.TemplateWizardIterImpl.instantiate(TemplateWizardIterImpl.java:228)
	at org.openide.loaders.TemplateWizardIteratorWrapper$ProgressInstantiatingIterator.instantiate(TemplateWizardIteratorWrapper.java:155)
	at org.openide.WizardDescriptor.callInstantiateOpen(WizardDescriptor.java:1602)
	at org.openide.WizardDescriptor.callInstantiate(WizardDescriptor.java:1546)
	at org.openide.WizardDescriptor.access$2300(WizardDescriptor.java:67)
	at org.openide.WizardDescriptor$Listener$2$1.run(WizardDescriptor.java:2233)
	at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1420)
	at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:45)
	at org.openide.util.lookup.Lookups.executeWith(Lookups.java:287)
	at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2035)
WARNING [org.netbeans.modules.options.keymap.LayersBridge]: Invalid shortcut: org.openide.loaders.XMLDataObject@960e46c[MultiFileObject@6c55e663[Actions/Help/master-help.xml]]

Ideally the wizard would print some useful msg to the user instead of simply disappearing, but nb wizard code is a mess, so I am not sure if this can be easily achieved.

@lkishalmi lkishalmi force-pushed the gradle-bootclasspath branch from e7c7651 to 13d9f13 Compare March 24, 2024 15:29
@lkishalmi lkishalmi merged commit d13f34b into apache:master Mar 25, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Gradle [ci] enable "build tools" tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants