3 votes

SoftwareComponentInternal avec le nom 'java' introuvable

Module d'application build.gradle

apply plugin: 'com.android.library'
apply from: rootProject.file('deploy-bintray.gradle.kts')
android {...}

deploy-bintray.gradle.kts c'est mes publications bintray/maven script.

J'ai des problèmes pour générer des fichiers .jar :

val sourcesJar by tasks.registering(Jar::class) {
    archiveClassifier.set("sources")
    from(project.the<SourceSetContainer>()["main"].allSource)
}

publications {
        create<MavenPublication>(bintrayRepo) {
            groupId = publishedGroupId
            artifactId = artifact
            version = libraryVersion

            from(components["java"])
            artifact(sourcesJar.get())
            artifact(dokkaJar.get())
            ...
            }
        }
    }

il échoue avec :

SoftwareComponentInternal avec le nom 'java' introuvable.

ou, si je commente from(components["java"]) il échoue avec :

Le SourceSet avec le nom 'main' n'a pas été trouvé.

Si j'ajoute le plugin java :

Le plugin "java" a été appliqué, mais il n'est pas compatible avec la norme Android.

Je suis donc coincé ici. Comment puis-je résoudre ce problème ?

6voto

GuilhE Points 6715

J'ai enfin trouvé une solution !
Je faisais plusieurs choses de travers, d'abord, les deux dokkaJar y sourceJar les tâches doivent se situer dans la partie principale build.gradle et non à l'intérieur deploy-bintray.gradle.kts . Les déplacer a permis de les faire fonctionner et de les réparer :

SourceSet with name 'main' not found.

Deuxièmement, nous ne pouvons pas utiliser from(components["java"]) car il s'agit d'une librairie Android, j'ai donc remplacé cette ligne par artifact("$buildDir/outputs/aar/${artifactId}-release.aar") .

Enfin et surtout, comme indiqué ici (étape 7) :

"De plus, le fichier POM généré n'inclut pas la chaîne de dépendances. il faut donc l'ajouter explicitement..."

Je me devais d'ajouter ceci :

pom {
...
    withXml {
       val dependenciesNode = asNode().appendNode("dependencies")
       configurations.getByName("implementation") {
         dependencies.forEach {
            val dependencyNode = dependenciesNode.appendNode("dependency")
            dependencyNode.appendNode("groupId", it.group)
            dependencyNode.appendNode("artifactId", it.name)
            dependencyNode.appendNode("version", it.version)
         }
       }     
    }       
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X