1

在我的第三个问题之后几乎感觉像是在发送垃圾邮件,因为我的问题看起来如此微不足道。但是我只是在 Gradle Docs 中没有为我的案例找到任何帮助,而且关于 stackoverflow 的其他问题也没有帮助。

这次:我不能maven-publish在我自己的独立自定义插件中使用该插件。到目前为止我的插件的代码:

package com.sample.gradle;

import org.gradle.api.Project;
import org.gradle.api.Plugin;

public class SampleGradlePlugin implements Plugin<Project> {
    public void apply(Project project) {

        project.apply plugin: 'application'
        project.apply plugin: 'maven-publish'
        project.apply plugin: 'maven'

        project.publishing.publications {
            maven(MavenPublication) {
                groupId project.group
                artifactId project.name
                version=project.version
                from components.java
            }
        }

        project.uploadArchives {
            repositories {
                mavenDeployer {
                    repository(url: project.Repo_Upload_Internal){
                        authentication(userName: project.Repo_Upload_User, password: project.Repo_Upload_Pass)
                    }        
                    snapshotRepository(url: project.Repo_Upload_Snapshot){
                        authentication(userName: project.Repo_Upload_User, password: project.Repo_Upload_Pass)
                    }
                }
            }
        }
        //this try/catch is not important for my question
        try{
            project.repositories {
                maven {
                    url project.Repo_Gp_Internal
                    credentials {
                        username project.Repo_Gp_User;
                    }
                }
            }
        }
        catch(MissingPropertyException e){
            println "Info: '"+e.getProperty()+"' not declared in \\"+project.name+"\\gradle.properties"
        }
    }
}

publishing我在我的一个项目中使用我的插件时,闭包是给我带来这个错误的重要部分:

FAILURE: Build failed with an exception.

* Where:
Build file 'C:\Users\quastc\Desktop\Gradle_Projects\Application_RootProject\buil
d.gradle' line: 3

* What went wrong:
A problem occurred evaluating root project 'Application_RootProject'.
> Failed to apply plugin [id 'sample.sample-groovy-plugin']
   > Cannot create a Publication named 'MavenPublication' because this container
 does not support creating elements by name alone. Please specify which subtype
of Publication to create. Known subtypes are: MavenPublication

我的错在哪里?我忘记了什么?

如果有人回答,请告诉我您是如何获得知识的。

4

4 回答 4

4

就我而言,我修复了该错误消息,并添加了以下内容:

import org.gradle.api.publish.maven.MavenPublication

但是后来遇到了其他问题,最后最终使用了nebula-publishing-plugin,解决了所有问题

于 2016-09-07T12:09:18.400 回答
1

找到了适合我的解决方案。我不再使用maven-publish插件了。只是maven插件。然后我把这段代码放在我自己的插件的末尾:

    project.configurations {
        deployerJars 
    }
    project.dependencies {
        deployerJars "org.apache.maven.wagon:wagon-http:2.2"
    }   
    project.uploadArchives {
        repositories {
            mavenDeployer {
                repository(url: project.Repo_Upload_Internal){
                    authentication(userName: project.Repo_Upload_User, password: project.Repo_Upload_Pass)
                }        
                snapshotRepository(url: project.Repo_Upload_Snapshot){
                    authentication(userName: project.Repo_Upload_User, password: project.Repo_Upload_Pass)
                }
            }
        }
    }

更远:

我还没有找到抑制上传 zip 和 tar 文件的方法。我仍然需要在几个build.gradle文件中复制和粘贴代码来完成这项工作。就是这个代码:

configurations.archives.with {
    artifacts.remove artifacts.find { it.archiveTask.is distZip }
    artifacts.remove artifacts.find { it.archiveTask.is distTar }
}

我无法更改该代码以在我的自定义插件中工作。

于 2016-08-05T14:10:04.530 回答
1

这对我有用,使用 gradle 4.10 和 maven-publish。

在我的自定义插件 .groovy 中:

import org.gradle.api.publish.maven.MavenPublication

...

project.extensions.configure PublishingExtension, new ClosureBackedAction( {
                publications{
                    mycustompub(MavenPublication) {
                        groupId = project.group
                        artifactId = <artifact name>
                        artifact source: <path to artifact>, extension: 'zip'
                    }
            }})
于 2019-02-07T14:19:10.153 回答
0

您传递给 project.publishing.publications 的闭包在执行时没有project在其上下文中。这意味着MavenPublication不在闭包的上下文中,即使您maven-plugin申请project.

如果您在构建脚本中编写插件,默认情况下它将具有project上下文,但将其编写为独立插件时上下文不同。

您可以setDelegate(project)在闭包上设置上下文,然后传递它:

def publicationsClosure =  {
    maven(MavenPublication) {
        groupId project.group
        artifactId project.name
        version=project.version
        from components.java
    }
}
publicationsClosure.setDelegate(project)
project.publishing.publications(publicationsClosure)

我在插件中遇到了同样的错误,当我阅读这篇文章时最终意识到发生了什么:http: //trickyandroid.com/gradle-tip-2-understanding-syntax/

于 2016-08-19T09:35:04.793 回答