Gradle:使用';maven publish';自定义独立插件中的插件
在我的第三个问题之后,我几乎感觉像是在发垃圾邮件,因为我的问题看起来很琐碎。但我只是在Gradle Docs中找不到任何关于我的案例的帮助,其他关于stackoverflow的问题也没有帮助 这次:我不能在我自己的独立自定义插件中使用Gradle:使用';maven publish';自定义独立插件中的插件,gradle,groovy,maven-publish,Gradle,Groovy,Maven Publish,在我的第三个问题之后,我几乎感觉像是在发垃圾邮件,因为我的问题看起来很琐碎。但我只是在Gradle Docs中找不到任何关于我的案例的帮助,其他关于stackoverflow的问题也没有帮助 这次:我不能在我自己的独立自定义插件中使用maven publish插件。到目前为止,我的插件的代码是: package com.sample.gradle; import org.gradle.api.Project; import org.gradle.api.Plugin; public clas
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"
}
}
}
我的错在哪里?我忘了什么
如果有人回答,请告诉我你是如何获得知识的 现在找到了一个适合我的解决方案。我不再使用
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 }
}
我还不能在我的自定义插件中修改代码 现在找到了一个适合我的解决方案。我不再使用
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 }
}
我还不能在我的自定义插件中修改代码 传递给project.publishing.publications的闭包在执行时上下文中没有
project
。这意味着maven发布
不在闭包上下文中,即使您将maven插件
应用于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)
我在一个插件中也遇到了同样的错误,当我读到这篇文章时,我最终意识到发生了什么:您传递给project.publishing.publications的闭包在执行时在上下文中没有
project
。这意味着maven发布
不在闭包上下文中,即使您将maven插件
应用于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)
我在一个插件中也遇到了同样的错误,当我读到这篇文章时,我终于意识到发生了什么:在我的例子中,我修复了错误消息,添加了以下内容:
import org.gradle.api.publish.maven.MavenPublication
但后来遇到了其他问题,最终使用解决了所有问题。在我的案例中,我修复了错误消息,添加了以下内容:
import org.gradle.api.publish.maven.MavenPublication
但后来又遇到了其他问题,最终使用了,解决了所有问题。这对我来说是可行的,gradle 4.10和maven publish 在我的自定义plugin.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'
}
}})
import org.gradle.api.publish.maven.MavenPublication
...
project.extensions.configure PublishingExtension,新ClosureBackedAction({
出版物{
mycustompub(MavenPublication){
groupId=project.group
artifactId=
工件源:,扩展名:“zip”
}
}})
在gradle 4.10和maven publish中,这对我来说很有效
在我的自定义plugin.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'
}
}})
import org.gradle.api.publish.maven.MavenPublication
...
project.extensions.configure PublishingExtension,新ClosureBackedAction({
出版物{
mycustompub(MavenPublication){
groupId=project.group
artifactId=
工件源:,扩展名:“zip”
}
}})
如果未导入MavenPublication,使用Groovy构建可能不会引发编译错误。在这种情况下会引发“不支持仅按名称创建元素”错误。如果未导入MavenPublication,则使用Groovy构建可能不会引发编译错误。在本例中会抛出“不支持仅按名称创建元素”错误。仅供参考,防止上载zip和tar文件的代码与Gradle 4.x及更高版本的代码冲突。我在3.x和4.x Gradle上找到了一个类似的解决方案,似乎做了同样的事情,在//不要将ZIP和TAR发行版上载到Maven repo configurations.archives.with{artifacts.removeAll{it.file=~'TAR'}artifacts.removeAll{it.file=~'ZIP'}
FYI,防止上载zip和tar文件的代码与Gradle 4.x及更高版本的代码冲突。我在3.x和4.x Gradle上找到了一个类似的解决方案,它似乎做了同样的事情,在//不要将ZIP和TAR发行版上载到Maven repo configurations.archives.with{artifacts.removeAll{it.file=~'TAR'}artifacts.removeAll{it.file=~'ZIP'}