kyoripowered / indra Goto Github PK
View Code? Open in Web Editor NEWA set of Gradle plugins to apply common organization build settings.
License: MIT License
A set of Gradle plugins to apply common organization build settings.
License: MIT License
This decouples the core of indra from the (now abandoned) Cadix licenser plugin
This does not affect which versions projects can target, but reflects that we are fairly rapidly nearing the time next fall when JDK 21 will be the most recent LTS, leaving Java 11 as the 3rd-most recent LTS release. The ecosystem has had a decent amount of time to catch up and our tooling all fully supports Java 17, with enough time to get the kinks worked out.
Individual projects are already using Java 17 as a minimum due to various bugfixes present in tools, so it would make sense to make it the default.
In a multi-release jar situation, we don't get automatic validation of modules by the compiler.
This means that module descriptor errors can end up in the published version of the module, causing problems for modular consumers. Using jdeps
built into the JDK, we should be able to provide some verification.
I'm unable to compile a project that targets Java 8 and requires access to the sun.misc package (for Unsafe).
I used the following command to get this exception: gradlew clean build
, using: Tim203/Floodgate@866a297 (minus minimumToolchain(8)
in floodgate.base-conventions.gradle.kts).
After that I tried adding minimumToolchain(8)
as well (like the linked commit does), but with the same result.
After that I've added the strictMultireleaseVersions
project property (full command: gradlew clean build -PstrictMultireleaseVersions=true
) and I received the following error:
Could not determine the dependencies of task ':api:javadoc'.
> Could not resolve all dependencies for configuration ':api:compileClasspath'.
> Failed to query the value of task ':api:compileJava' property 'options.release'.
> java.lang.IllegalArgumentException (no error message)
Stacktrace:
org.gradle.api.internal.tasks.TaskDependencyResolveException: Could not determine the dependencies of task ':api:shadowJar'.
at org.gradle.api.internal.tasks.CachingTaskDependencyResolveContext.getDependencies(CachingTaskDependencyResolveContext.java:71)
at org.gradle.execution.plan.TaskDependencyResolver.resolveDependenciesFor(TaskDependencyResolver.java:46)
at org.gradle.execution.plan.LocalTaskNode.getDependencies(LocalTaskNode.java:161)
at org.gradle.execution.plan.LocalTaskNode.resolveDependencies(LocalTaskNode.java:129)
at org.gradle.execution.plan.DefaultExecutionPlan.doAddNodes(DefaultExecutionPlan.java:186)
at org.gradle.execution.plan.DefaultExecutionPlan.addEntryTasks(DefaultExecutionPlan.java:150)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph.addEntryTasks(DefaultTaskExecutionGraph.java:146)
at org.gradle.execution.TaskNameResolvingBuildConfigurationAction.configure(TaskNameResolvingBuildConfigurationAction.java:49)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:51)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter.access$000(DefaultBuildConfigurationActionExecuter.java:25)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter$1.proceed(DefaultBuildConfigurationActionExecuter.java:59)
at org.gradle.execution.DefaultTasksBuildExecutionAction.configure(DefaultTasksBuildExecutionAction.java:48)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:51)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter.lambda$select$0(DefaultBuildConfigurationActionExecuter.java:38)
at org.gradle.internal.Factories$1.create(Factories.java:31)
at org.gradle.api.internal.project.DefaultProjectStateRegistry.withMutableStateOfAllProjects(DefaultProjectStateRegistry.java:160)
at org.gradle.api.internal.project.DefaultProjectStateRegistry.withMutableStateOfAllProjects(DefaultProjectStateRegistry.java:147)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter.select(DefaultBuildConfigurationActionExecuter.java:37)
at org.gradle.initialization.DefaultTaskExecutionPreparer.prepareForTaskExecution(DefaultTaskExecutionPreparer.java:39)
at org.gradle.initialization.VintageBuildModelController.lambda$prepareTaskExecution$3(VintageBuildModelController.java:101)
at org.gradle.internal.build.StateTransitionController.lambda$doTransition$1(StateTransitionController.java:222)
at org.gradle.internal.build.StateTransitionController.doTransition(StateTransitionController.java:243)
at org.gradle.internal.build.StateTransitionController.doTransition(StateTransitionController.java:221)
at org.gradle.internal.build.StateTransitionController.transitionIfNotPreviously(StateTransitionController.java:190)
at org.gradle.initialization.VintageBuildModelController.prepareTaskExecution(VintageBuildModelController.java:101)
at org.gradle.initialization.VintageBuildModelController.doBuildStages(VintageBuildModelController.java:85)
at org.gradle.initialization.VintageBuildModelController.scheduleRequestedTasks(VintageBuildModelController.java:69)
at org.gradle.internal.build.DefaultBuildLifecycleController.lambda$scheduleRequestedTasks$1(DefaultBuildLifecycleController.java:111)
at org.gradle.internal.build.DefaultBuildWorkPreparer.populateWorkGraph(DefaultBuildWorkPreparer.java:28)
at org.gradle.internal.build.BuildOperationFiringBuildWorkPreparer$PopulateWorkGraph.populateTaskGraph(BuildOperationFiringBuildWorkPreparer.java:120)
at org.gradle.internal.build.BuildOperationFiringBuildWorkPreparer$PopulateWorkGraph.run(BuildOperationFiringBuildWorkPreparer.java:76)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
at org.gradle.internal.build.BuildOperationFiringBuildWorkPreparer.populateWorkGraph(BuildOperationFiringBuildWorkPreparer.java:60)
at org.gradle.internal.build.DefaultBuildLifecycleController.lambda$populateWorkGraph$2(DefaultBuildLifecycleController.java:116)
at org.gradle.internal.build.StateTransitionController.inState(StateTransitionController.java:115)
at org.gradle.internal.build.DefaultBuildLifecycleController.populateWorkGraph(DefaultBuildLifecycleController.java:116)
at org.gradle.internal.build.DefaultBuildLifecycleController.scheduleRequestedTasks(DefaultBuildLifecycleController.java:111)
at org.gradle.internal.buildtree.DefaultBuildTreeWorkPreparer.lambda$scheduleRequestedTasks$0(DefaultBuildTreeWorkPreparer.java:35)
at org.gradle.composite.internal.DefaultIncludedBuildTaskGraph$1.run(DefaultIncludedBuildTaskGraph.java:113)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
at org.gradle.composite.internal.DefaultIncludedBuildTaskGraph.lambda$prepareTaskGraph$0(DefaultIncludedBuildTaskGraph.java:110)
at org.gradle.composite.internal.DefaultIncludedBuildTaskGraph.withState(DefaultIncludedBuildTaskGraph.java:236)
at org.gradle.composite.internal.DefaultIncludedBuildTaskGraph.prepareTaskGraph(DefaultIncludedBuildTaskGraph.java:107)
at org.gradle.internal.buildtree.DefaultBuildTreeWorkPreparer.scheduleRequestedTasks(DefaultBuildTreeWorkPreparer.java:34)
at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.lambda$doScheduleAndRunTasks$2(DefaultBuildTreeLifecycleController.java:86)
at org.gradle.composite.internal.DefaultIncludedBuildTaskGraph.withNewTaskGraph(DefaultIncludedBuildTaskGraph.java:94)
at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.doScheduleAndRunTasks(DefaultBuildTreeLifecycleController.java:85)
at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.lambda$runBuild$4(DefaultBuildTreeLifecycleController.java:103)
at org.gradle.internal.build.StateTransitionController.lambda$transition$0(StateTransitionController.java:145)
at org.gradle.internal.build.StateTransitionController.doTransition(StateTransitionController.java:243)
at org.gradle.internal.build.StateTransitionController.transition(StateTransitionController.java:145)
at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.runBuild(DefaultBuildTreeLifecycleController.java:100)
at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.scheduleAndRunTasks(DefaultBuildTreeLifecycleController.java:66)
at org.gradle.tooling.internal.provider.runner.BuildModelActionRunner.run(BuildModelActionRunner.java:53)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.internal.buildtree.ProblemReportingBuildActionRunner.run(ProblemReportingBuildActionRunner.java:49)
at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:69)
at org.gradle.tooling.internal.provider.FileSystemWatchingBuildActionRunner.run(FileSystemWatchingBuildActionRunner.java:114)
at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:41)
at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.lambda$execute$0(RootBuildLifecycleBuildActionExecutor.java:40)
at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:155)
at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.execute(RootBuildLifecycleBuildActionExecutor.java:40)
at org.gradle.internal.buildtree.DefaultBuildTreeContext.execute(DefaultBuildTreeContext.java:40)
at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.lambda$execute$0(BuildTreeLifecycleBuildActionExecutor.java:65)
at org.gradle.internal.buildtree.BuildTreeState.run(BuildTreeState.java:53)
at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.execute(BuildTreeLifecycleBuildActionExecutor.java:65)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call(RunAsBuildOperationBuildActionExecutor.java:61)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call(RunAsBuildOperationBuildActionExecutor.java:57)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor.execute(RunAsBuildOperationBuildActionExecutor.java:57)
at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.lambda$execute$0(RunAsWorkerThreadBuildActionExecutor.java:38)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:211)
at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.execute(RunAsWorkerThreadBuildActionExecutor.java:38)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecutor.execute(ContinuousBuildActionExecutor.java:103)
at org.gradle.tooling.internal.provider.SubscribableBuildActionExecutor.execute(SubscribableBuildActionExecutor.java:64)
at org.gradle.internal.session.DefaultBuildSessionContext.execute(DefaultBuildSessionContext.java:46)
at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter$ActionImpl.apply(BuildSessionLifecycleBuildActionExecuter.java:100)
at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter$ActionImpl.apply(BuildSessionLifecycleBuildActionExecuter.java:88)
at org.gradle.internal.session.BuildSessionState.run(BuildSessionState.java:69)
at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute(BuildSessionLifecycleBuildActionExecuter.java:62)
at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute(BuildSessionLifecycleBuildActionExecuter.java:41)
at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:36)
at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:25)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:63)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:31)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:58)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:42)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:47)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:31)
at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:65)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:29)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75)
at org.gradle.util.internal.Swapper.swap(Swapper.java:38)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:84)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:61)
Caused by: org.gradle.api.internal.provider.AbstractProperty$PropertyQueryException: Failed to query the value of task ':api:compileJava' property 'options.release'.
at org.gradle.api.internal.provider.AbstractProperty.calculatePresence(AbstractProperty.java:61)
at org.gradle.api.internal.provider.AbstractMinimalProvider.isPresent(AbstractMinimalProvider.java:74)
at org.gradle.api.plugins.jvm.internal.DefaultJvmPluginServices.lambda$configureDefaultTargetPlatform$5(DefaultJvmPluginServices.java:221)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.preventFromFurtherMutation(DefaultConfiguration.java:1074)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$1.call(DefaultConfiguration.java:639)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$1.call(DefaultConfiguration.java:635)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveGraphIfRequired(DefaultConfiguration.java:635)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.lambda$resolveExclusively$4(DefaultConfiguration.java:615)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$CalculatedModelValueImpl.update(DefaultProjectStateRegistry.java:478)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveExclusively(DefaultConfiguration.java:612)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveToStateOrLater(DefaultConfiguration.java:599)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.getResolvedConfiguration(DefaultConfiguration.java:574)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration_Decorated.getResolvedConfiguration(Unknown Source)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.gradle.internal.metaobject.BeanDynamicObject$MetaClassAdapter.getProperty(BeanDynamicObject.java:233)
at org.gradle.internal.metaobject.BeanDynamicObject.tryGetProperty(BeanDynamicObject.java:176)
at org.gradle.internal.metaobject.CompositeDynamicObject.tryGetProperty(CompositeDynamicObject.java:55)
at org.gradle.internal.metaobject.AbstractDynamicObject.getProperty(AbstractDynamicObject.java:60)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration_Decorated.getProperty(Unknown Source)
at com.github.jengelman.gradle.plugins.shadow.internal.AbstractDependencyFilter.resolve(AbstractDependencyFilter.groovy:30)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at com.github.jengelman.gradle.plugins.shadow.internal.AbstractDependencyFilter$_resolve_closure2.doCall(AbstractDependencyFilter.groovy:38)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at com.github.jengelman.gradle.plugins.shadow.internal.AbstractDependencyFilter.resolve(AbstractDependencyFilter.groovy:37)
at com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar$1.call(ShadowJar.java:50)
at com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar$1.call(ShadowJar.java:46)
at org.gradle.util.internal.GUtil.uncheckedCall(GUtil.java:454)
at org.gradle.util.internal.DeferredUtil.unpackNestableDeferred(DeferredUtil.java:83)
at org.gradle.api.internal.file.collections.UnpackingVisitor.add(UnpackingVisitor.java:87)
at org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection$UnresolvedItemsCollector.visitContents(DefaultConfigurableFileCollection.java:372)
at org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection.visitChildren(DefaultConfigurableFileCollection.java:284)
at org.gradle.api.internal.file.CompositeFileCollection.visitDependencies(CompositeFileCollection.java:108)
at org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection.visitDependencies(DefaultConfigurableFileCollection.java:290)
at org.gradle.api.internal.tasks.CachingTaskDependencyResolveContext$TaskGraphImpl.getNodeValues(CachingTaskDependencyResolveContext.java:114)
at org.gradle.internal.graph.CachingDirectedGraphWalker$GraphWithEmptyEdges.getNodeValues(CachingDirectedGraphWalker.java:213)
at org.gradle.internal.graph.CachingDirectedGraphWalker.doSearch(CachingDirectedGraphWalker.java:121)
at org.gradle.internal.graph.CachingDirectedGraphWalker.findValues(CachingDirectedGraphWalker.java:73)
at org.gradle.api.internal.tasks.CachingTaskDependencyResolveContext.getDependencies(CachingTaskDependencyResolveContext.java:69)
... 136 more
Caused by: java.lang.IllegalArgumentException
at org.gradle.api.internal.provider.ValueSupplier$Value.of(ValueSupplier.java:215)
at org.gradle.api.internal.provider.BiProvider.calculateOwnValue(BiProvider.java:56)
at org.gradle.api.internal.provider.AbstractMinimalProvider.calculatePresence(AbstractMinimalProvider.java:79)
at org.gradle.api.internal.provider.MappingProvider.calculatePresence(MappingProvider.java:50)
at org.gradle.api.internal.provider.AbstractProperty.calculatePresence(AbstractProperty.java:58)
... 187 more
Should we add something to Indra to prevent the need to do this in individual projects?
tasks.withType(JavaCompile).each {
it.options.compilerArgs.add("--enable-preview")
}
tasks.withType(Javadoc).each {
it.options {
addBooleanOption("-enable-preview", true)
}
}
Right now, when test coverage tasks are run jacoco doesn't know about multirelease sources, so it detects a mismatch between the executed bytecode and the source in the case of any class file using multirelease variants.
This results in error messages like:
> Task :core:jacocoTestReport
[ant:jacocoReport] Classes in bundle 'core' do not match with execution data. For report generation the same class files must be used as at runtime.
[ant:jacocoReport] Execution data for class org/spongepowered/configurate/objectmapping/RecordFieldDiscoverer$1 does not match.
[ant:jacocoReport] Execution data for class org/spongepowered/configurate/util/UnmodifiableCollections does not match.
[ant:jacocoReport] Execution data for class org/spongepowered/configurate/objectmapping/RecordFieldDiscoverer does not match.
Is it possible to resolve this, and (potentially) run coverage reports for every multirelease variant?
This would allow using Javadoc features from newer Java versions in a project that still targets Java 8.
Any documentation or example anywhere?
It seems to make more sense to consolidate all handling of releases into one place, in the multirelease plugin.
Some of the versioning logic is pretty closely interconnected, so some versions are based on the lowest target, but others are based on the highest version used within a source set.
This would also allow the multirelease plugin to be used separately from the rest of indra.
to understand what needs to be checked in to the repo
add an additional plugin to configure dependency locking based on what I've tried out in Configurate:
settings.gradle.kts
I think)resolveAllForLocking
that resolves all declared resolvable configurationsrootProject.file("gradle/dependencies/${absolute path to project}.dependency.lock")
Now that the latest versions of several of our dependencies (Spotless, JGit) target Java 11 as a minimum, and many people are developing software targeting even Java 17, we might as well bump our required Java runtime to J11.
For modules where all or almost all of the packages should be expocted, it would be helpful to have a task to automatically validate that every package that should be exported, is exported.
This task should be able to take a list of exceptions -- as a list of prefixes, or perhaps a regex (though probably the prefix list is more appropriate), so we can allow for a list of internal packages.
make it easy to produce multi-release jars
module-info.class
maybe?Does our requirement still work correctly?
Indra seems to add dependencies to the module path in via the Gradle eclipse plugin even when a project has no module-info.java or automatic module name set. This can lead to the project failing to be compiled in eclipse due to JPMS errors.
Geyser is an example of this, which recently moved to Indra for builds but does not declare modules. I opened a PR there to temporarily mitigate this GeyserMC/Geyser#3584 but they advised I open a bug on Indra. It can also be mitigated by temporarily setting inferModulePath to false, as that ensures the check for if a library should be added to the module path returns false.
Relevant code:
https://github.com/KyoriPowered/indra/blob/main/3.x/indra-common/src/main/java/net/kyori/indra/internal/multirelease/IndraMultireleasePlugin.java#L540-L569
https://github.com/KyoriPowered/indra/blob/main/3.x/indra-common/src/main/java/net/kyori/indra/internal/ModularityDetecter.java#L53-L117
I also discussed in the Adventure Discord. See https://discord.com/channels/319355592605040642/923221456073150525/1079701892550103040.
This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.
These updates are awaiting their schedule. Click on a checkbox to get an update now.
Warning
Renovate failed to look up the following dependencies: Failed to look up maven package gradle.plugin.org.cadixdev.gradle:licenser
, Failed to look up maven package org.gradlex:java-ecosystem-capabilities
, Failed to look up maven package com.gradle.publish:plugin-publish-plugin
, Failed to look up maven package io.github.gradle-nexus:publish-plugin
.
Files affected: gradle/libs.versions.toml
These updates have all been created already. Click a checkbox below to force a retry/rebase of any.
gradle
, org.gradle.toolchains.foojay-resolver-convention
, com.diffplug.spotless
, com.diffplug.eclipse.apt
).github/workflows/build.yml
.github/workflows/test-gradle-rc.yml
gradle.properties
settings.gradle
org.gradle.toolchains.foojay-resolver-convention 0.7.0
build.gradle
gradle/libs.versions.toml
org.junit:junit-bom 5.10.1
org.immutables:builder 2.10.0
org.immutables:value 2.10.0
org.jetbrains:annotations 24.1.0
net.kyori:mammoth 1.3.1
org.ow2.asm:asm 9.6
gradle.plugin.org.cadixdev.gradle:licenser 0.6.1
org.gradlex:java-ecosystem-capabilities 1.3.1
org.jetbrains.kotlin:kotlin-gradle-plugin 1.9.22
org.eclipse.jgit:org.eclipse.jgit 6.8.0.+
com.gradle.publish:plugin-publish-plugin 1.2.1
io.github.gradle-nexus:publish-plugin 1.3.0
net.kyori:mammoth-test 1.3.1
com.diffplug.eclipse.apt 3.42.2
com.gradle.plugin-publish 1.2.1
net.kyori.indra 3.1.3
net.kyori.indra.licenser.spotless 3.1.3
net.kyori.indra.publishing.gradle-plugin 3.1.3
com.diffplug.spotless 6.21.0
indra-common/build.gradle
indra-crossdoc/build.gradle
indra-git/build.gradle
indra-licenser-cadix/build.gradle
indra-licenser-spotless/build.gradle
indra-publishing-gradle-plugin/build.gradle
indra-publishing-sonatype/build.gradle
indra-testlib/gradle.properties
indra-testlib/build.gradle
gradle/wrapper/gradle-wrapper.properties
gradle 8.4
It'd be nice to have an easy way to configure the indra sonatype publishing to point to the new s01.oss.sonatype.org
snapshot/release repository. Perhaps just a function you can call to set that instead of the normal one.
With mammoth-test
, there is a lot less boilerplate to creating Gradle functional tests.
We should do some of these to validate plugin functionality automatically.
at least until someone can be bothered to write a working Kotlin plugin for eclipse
There's a very rough version of this in the Configurate codebase at https://github.com/SpongePowered/Configurate/blob/ea78b5c003ecf917b1081da24a01619bc2d22743/build-logic/src/main/groovy/org.spongepowered.configurate.build.publishing.gradle#L22
This implementation is quite brittle at the moment, rough improvements:
After upgrading to Gradle 7.1.x my project cannot be built (>= Gradle 7.1.0).
Th error log is:
Failed to apply plugin class 'org.cadixdev.gradle.licenser.Licenser'.
> Could not get unknown property 'header' for extension 'base' of type org.gradle.api.plugins.internal.DefaultBasePluginExtension.
This depends on changes in Gradle 7.4-rc-1, use ArtifactCollection.getResolvedArtifacts()
as the task input instead.
Currently, Indra's java versioning only applies to Java targets. We should extend this to apply to all common JVM-targeting plugins.
This is relatively easy for Groovy and Scala, since their plugins are built into Gradle.
Kotlin requires a few more tricks -- we'll run into classloader issues in cases where indra
is applied to the root project plus subprojects, but the kotlin plugin is only applied to a subproject, so that needs to be worked around
Need to confirm which gradle versions support toolchains for groovy/scala, and which kotlin plugin versions support toolchains.
With Gradle 7.4, Kotlin buildscripts will now have accessors generated for repositories extensions. This means we don't have to provide our own extension functions anymore.
With this change, we can work towards removing all references to the Kotlin plugin from our build. This will improve build times and reduce the potential for classpath conflicts that we currently have.
The repositories extension generation might need to be changed to use something other than a Groovy Closure
-- but that can be tested whenever we're ready to start work on Indra 3.
When the base source set is java 8, and the module descriptor is in one of the multirelease variants, the Javadoc task does not read the JD as modular by default. We should be able to pass the appropriate arguments to the Javadoc tool to generate modular documentation. See SpongePowered/noise@d34a8c6#diff-49a96e7eea8a94af862798a45174e6ac43eb4f8b4bd40759b5da63ba31ec3ef7R26 for a simple implementation.
indra-publishing requires that the repository is tagged, but only accepts lightweight tags.
Annotated tags, either signed git tag v1.0.0 -s
or commented git tag v1.0.0 -m "first release"
, are not accepted.
Deleting the tag and recreating a lightweight one then causes the configured repository to be added ("is in a release state").
To detect cases where properties are finalized before the project buildscript has a chance to execute
zml pointed me here so here I am.
Suspect commit: QuiltMC/yarn@7763418 and github action for suspect: https://github.com/QuiltMC/yarn/runs/2462092542
Action script at that commit: https://github.com/QuiltMC/yarn/blob/7763418842b1b751ec8fcba8bde1aea24d4aaa78/.github/workflows/publish.yml
The script runs Java in docker.
Because Eclipse does codestyle configuration per-project, it can be annoying to override specific settings. We should be able to configure the appropriate JDT options for codestyle and import order automatically as part of the project import.
Currently, the eclipse plugin will not put any dependencies on the module path if they don't see the main source set as having a module-info.java
. However, with the multirelease plugin we can have a module-info in a secondary source set, so we need to take on this module detection ourselves (and/or file a Gradle issue)
Currently, if another dependency is used in the checkstyle
configuration, the checkstyle version set in Indra's extension is entirely ignored.
We should fix this by applying a constraint on the checkstyle artifact in the checkstyle
configuration.
As added for adventure in KyoriPowered/adventure#403, but generalized to avoid assuming the adventure-javadocs
directory structure
For cases where some projects have uppercase names, we would much rather lowercase those automatically.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.