Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

com.gradle.plugin-publish adds javadocElements configuration very late, so it causes conflicts with user-defined javadocElement configuration #21933

Open
vlsi opened this issue Sep 8, 2022 · 0 comments

Comments

@vlsi
Copy link
Contributor

vlsi commented Sep 8, 2022

Expected Behavior

There should be a way to write Gradle plugins with Kotlin.
com.gradle.plugin-publish should refrain from adding configurations in afterEvaluate.

Frankly speaking, I would be fine if plugin-publish added javadocElements always, however, the current behaviour is surprising, it causes warnings, and it will probably cause failures with Gradle 8.0

Current Behavior

I used my own configuration to publish javadoc files generated by Dokka

// https://github.com/gradle/gradle/pull/16627
inline fun <reified T: Named> AttributeContainer.attribute(attr: Attribute<T>, value: String) =
    attribute(attr, objects.named<T>(value))

val javadocMainElements by configurations.creating {
    isVisible = false
    description = "Javadoc code elements"
    isCanBeResolved = false
    isCanBeConsumed = true

    attributes {
        attribute(Category.CATEGORY_ATTRIBUTE, Category.DOCUMENTATION)
        attribute(DocsType.DOCS_TYPE_ATTRIBUTE, DocsType.JAVADOC)
        attribute(Usage.USAGE_ATTRIBUTE, Usage.JAVA_RUNTIME)
        attribute(Bundling.BUNDLING_ATTRIBUTE, Bundling.EXTERNAL)
    }
}

val javadocJar by tasks.registering(Jar::class) {
    group = LifecycleBasePlugin.BUILD_GROUP
    description = "Assembles a jar archive containing javadoc"
    from(tasks.dokkaJavadoc)
    archiveClassifier.set("javadoc")
}

javadocMainElements.outgoing.artifact(javadocJar)

(components["java"] as AdhocComponentWithVariants).addVariantsFromConfiguration(javadocMainElements) {
    mapToOptional()
    mapToMavenScope("runtime")
}

Unfortunately, it causes a warning:

Consumable configurations with identical capabilities within a project must have unique attributes, but configuration ':sigstore-gradle:sigstore-gradle-sign-base-plugin:javadocMainElements' and configuration ':sigstore-gradle:sigstore-gradle-sign-base-plugin:javadocElements' contain identical attribute sets.
This will fail with an error in Gradle 8.0. Consider adding an additional attribute to one of the configurations to disambiguate them.  Run the 'outgoingVariants' task for more details. Consult the upgrading guide for further information: https://docs.gradle.org/7.4.2/userguide/upgrading_version_7.html#unique_attribute_sets

As I tried to figure out what adds javadocElements configuration, I found it was plugin-publish:

configurations.all{
    if (name =="javadocElements") {
        TODO("javadocElements should not be created")
    }
}

Note PublishPlugin.forceJavadocAndSourcesJars below.

        org.gradle.internal.event.ListenerNotificationException: Failed to notify project evaluation listener.
            at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:89)
            at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:346)
            at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:249)
            at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:141)
            at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:37)
            at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate$1.execute(LifecycleProjectEvaluator.java:247)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate$1.execute(LifecycleProjectEvaluator.java:244)
            at org.gradle.api.internal.project.DefaultProject.stepEvaluationListener(DefaultProject.java:1433)
            at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate.run(LifecycleProjectEvaluator.java:253)
            ... 139 more
            kotlin.NotImplementedError: An operation is not implemented: javadocElements should not be created
                at Build_logic_kotlin_gradle$2.execute(build-logic.kotlin.gradle.kts:13)
                at Build_logic_kotlin_gradle$2.execute(build-logic.kotlin.gradle.kts:1)
                at org.gradle.configuration.internal.DefaultUserCodeApplicationContext$CurrentApplication$1.execute(DefaultUserCodeApplicationContext.java:123)
                at org.gradle.api.internal.DefaultCollectionCallbackActionDecorator$BuildOperationEmittingAction$1.run(DefaultCollectionCallbackActionDecorator.java:110)
                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.api.internal.DefaultCollectionCallbackActionDecorator$BuildOperationEmittingAction.execute(DefaultCollectionCallbackActionDecorator.java:107)
                at org.gradle.internal.ImmutableActionSet$SetWithManyActions.execute(ImmutableActionSet.java:329)
                at org.gradle.api.internal.DefaultDomainObjectCollection.doAdd(DefaultDomainObjectCollection.java:262)
                at org.gradle.api.internal.DefaultNamedDomainObjectCollection.doAdd(DefaultNamedDomainObjectCollection.java:113)
                at org.gradle.api.internal.DefaultDomainObjectCollection.add(DefaultDomainObjectCollection.java:251)
                at org.gradle.api.internal.AbstractNamedDomainObjectContainer.create(AbstractNamedDomainObjectContainer.java:79)
                at org.gradle.api.internal.AbstractValidatingNamedDomainObjectContainer.create(AbstractValidatingNamedDomainObjectContainer.java:47)
                at org.gradle.api.internal.AbstractNamedDomainObjectContainer.create(AbstractNamedDomainObjectContainer.java:56)
                at org.gradle.api.internal.AbstractNamedDomainObjectContainer.maybeCreate(AbstractNamedDomainObjectContainer.java:65)
                at org.gradle.api.plugins.internal.JvmPluginsHelper.maybeCreateInvisibleConfig(JvmPluginsHelper.java:261)
                at org.gradle.api.plugins.internal.JvmPluginsHelper.configureDocumentationVariantWithArtifact(JvmPluginsHelper.java:224)
                at org.gradle.api.plugins.internal.DefaultJavaPluginExtension.withJavadocJar(DefaultJavaPluginExtension.java:215)
                at com.gradle.publish.PublishPlugin.forceJavadocAndSourcesJars(PublishPlugin.java:125)
                at com.gradle.publish.PublishPlugin.lambda$apply$3(PublishPlugin.java:104)
                at org.gradle.configuration.internal.DefaultUserCodeApplicationContext$CurrentApplication$1.execute(DefaultUserCodeApplicationContext.java:123)
                at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction$1.run(DefaultListenerBuildOperationDecorator.java:171)
                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.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction.execute(DefaultListenerBuildOperationDecorator.java:168)
                at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:95)
                at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:83)
                at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:43)
                at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:245)
                at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:157)
                at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:61)
                ... 148 more

Context

See sigstore/sigstore-java#98

Steps to Reproduce

Create a plugin in Kotlin (==no regular javadoc jar). There should be a way to add dokka-generated jar to javadocs.

Your Environment

Gradle 7.4.2
com.gradle.plugin-publish.gradle.plugin:1.0.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants