- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想从RuleSource内部创建一个Maven发布,该发布将通过maven-publish
插件发布。出版物的 Artifact 是根据规则创建的一系列Zip任务的输出。当我尝试添加 Artifact 时,出现循环规则异常。
这是我非常简单的build.gradle
:
buildscript {
repositories {
mavenCentral()
}
dependencies {
}
}
task wrapper(type: Wrapper) {
gradleVersion = '3.3'
}
apply plugin: 'groovy'
apply plugin: 'testpub'
repositories {
mavenCentral()
}
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.4.7'
}
testpub
插件存在于
buildSrc
目录中。为了能够如上所述应用它,它需要以下属性文件:
// buildSrc/src/main/resources/META_INF/gradle-plugins/testpub.properties
implementation-class=TestPubPlugin
import org.gradle.api.Project
import org.gradle.api.Plugin
import org.gradle.model.RuleSource
import org.gradle.api.Task
import org.gradle.model.Mutate
import org.gradle.model.Finalize
import org.gradle.api.tasks.bundling.Zip
import org.gradle.model.ModelMap
import org.gradle.api.publish.PublishingExtension
import org.gradle.api.publish.maven.MavenPublication
class TestPubPlugin implements Plugin<Project> {
void apply(Project project) {
project.configure(project) {
apply plugin: 'maven-publish'
publishing {
repositories {
maven {
url "someUrl"
}
}
}
}
}
static class TestPubPluginRules extends RuleSource {
@Mutate
public void createSomeTasks(final ModelMap<Task> tasks) {
5.times { suffix ->
tasks.create("someTask${suffix}", Zip) {
from "src"
destinationDir(new File("build"))
baseName "someZip${suffix}"
}
}
}
@Mutate
public void configurePublishingPublications(final PublishingExtension publishing, final ModelMap<Task> tasks) {
// Intention is to create a single publication whose artifacts are formed by the `someTaskx` tasks
// where x = [0..4]
publishing {
publications {
mavPub(MavenPublication) {
tasks.matching {it.name.startsWith('someTask')}.each { task ->
artifact(task)
}
}
}
}
}
}
}
someTaskx
的任务,其中
x=[0..4]
。他们只是简单地压缩src目录。我想将输出文件作为 Artifact 添加到单个MavenPublication中。但是,我得到以下异常:
* What went wrong:
A problem occurred configuring root project 'testpub'.
> A cycle has been detected in model rule dependencies. References forming the cycle:
tasks
\- TestPubPlugin.TestPubPluginRules#createSomeTasks(ModelMap<Task>)
\- MavenPublishPlugin.Rules#realizePublishingTasks(ModelMap<Task>, PublishingExtension, File)
\- PublishingPlugin.Rules#tasksDependOnProjectPublicationRegistry(ModelMap<Task>, ProjectPublicationRegistry)
\- projectPublicationRegistry
\- PublishingPlugin.Rules#addConfiguredPublicationsToProjectPublicationRegistry(ProjectPublicationRegistry, PublishingExtension, ProjectIdentifier)
\- publishing
\- TestPubPlugin.TestPubPluginRules#configurePublishingPublications(PublishingExtension, ModelMap<Task>)
\- tasks
最佳答案
我不完全理解为什么这是一个“循环”,但是规则方法始终具有一个可变部分(主题)和零个或多个不变(输入)。在第二种方法中,您要传递publishing
作为要更改的主题,并传递tasks
作为输入。我以为可以,但是显然不是。
您可能试图切换方法参数,先传递任务,然后传递PublishingExtension
,但是您可能无法更改它(因为gradle文档说它是不可变的)。
我不确定您的用例到底是什么,可能有一个更简单的解决方案不使用规则或插件。也许您可以问其他与原始要求有关的问题,而不是这个特定问题。
但是回到您的问题。解决问题的方法可能是这样的:
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.publish.PublishingExtension
import org.gradle.api.publish.maven.MavenPublication
import org.gradle.api.tasks.bundling.Zip
import org.gradle.model.Defaults
import org.gradle.model.ModelMap
import org.gradle.model.Mutate
import org.gradle.model.RuleSource
class TestPubPlugin implements Plugin<Project> {
void apply(Project project) {
project.configure(project) {
apply plugin: 'maven-publish'
publishing {
publications {
maven(MavenPublication) {
groupId 'com.example'
artifactId 'artifact'
}
}
repositories {
maven {
url "someUrl"
}
}
}
}
}
static class TestPubPluginRules extends RuleSource {
static final def buffer = []
@Defaults
public void createSomeTasks(final ModelMap<Task> tasks) {
5.times { suffix ->
tasks.create("someTask${suffix}", Zip) {
from "src"
destinationDir(new File("build"))
baseName "someZip${suffix}"
}
}
tasks.each { task ->
if (task.name.startsWith('someTask'))
buffer << task
}
}
@Mutate
public void configurePublishingPublications(PublishingExtension extension) {
MavenPublication p = extension.publications[0]
buffer.each { task ->
p.artifact(task)
}
}
}
}
gradlew publish
并得到:
Execution failed for task ':publishMavenPublicationToMavenRepository'.
> Failed to publish publication 'maven' to repository 'maven'
> Invalid publication 'maven': artifact file does not exist: 'build\someZip0.zip'
关于gradle - Gradle:如何使规则创建的ZipTask成为Maven发布工件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41911241/
最近,我一直在尝试清理我的openGl渲染。我已经有一段时间了,但是从来没有真正考虑过。这是一个屏幕截图: 经过一些研究,我一直无法弄清楚它到底出了什么问题。我在OSX上使用OpenGl,但在其他系统
我尝试使用 glDrawArray 和 GL_TRIANGLE_STRIP 渲染纹理网格,但绘制时存在伪影,但在屏幕上分布不均匀。 Screenshot of the problem. 这是我使用的代
尝试使用 Github 的 beta 操作,我有两项工作,一项负责构建代码,另一项负责部署代码。但是,我似乎无法在部署作业中获取构建工件。 我最新的尝试是为每个作业手动设置具有相同卷的容器镜像,根据文
我是 Azure DevOps(托管代理)新手,正在尝试使用 Azure Pipelines 通过 Ant 构建我的 Java Web 应用程序 下面是管道文件 trigger: - azure-pi
我最近重新配置了 TeamCity 构建配置,以利用分支功能将相同的构建配置应用于同一存储库中的多个分支。 现在,我正在尝试设置一个自动构建脚本,该脚本可以从 TeamCity 中提取最新的工件,但仅
我通过 FFMPEG 和 OpenMAX 使用硬件编码。 如果我使用 FFmpeg h264_omx 作为 VideoWriter 的后端,我会得到图像 like this .颜色显然有点混合。 其他
我有一个 iPhone 应用程序,它有一个基于 TableView 的数据输入屏幕,带有一个切换开关,打开时会显示表格另一部分中的所有行。 有时,当应用程序首次加载时,通常是当它从手机中完全删除时,除
我在每次构建结束时归档工件。我有 https://wiki.jenkins-ci.org/display/JENKINS/Archived+Artifact+Url+Viewer+PlugIn安装。
我在 vsreport 虚拟模式下使用 ListView ,有两列,在填充列表后,选择一行,然后选择其他行,之前选择的行上留下了一个工件,请参见下图。如何解决这个问题? 这是我从数组获取数据的代码 p
我有一个巨大的遗留 EAR 项目。当前的构建过程使用 Ant,我正在尝试转换为 gradle。 旧的 Ant 构建使用单个源文件夹,所有内容都在其中(EJB 和 WAR 代码一起);然后 Ant 使用
我们有一个 ivy 存储库,我们使用 gradle 进行依赖管理和构建框架。当一个工件被确定为生产就绪时,我们不想再次构建它,所以我们只想通过一个利用 Gradle 和工具 API 来完成大部分工作的
我有一个 gradle 构建,它必须将预构建的 jar 文件发布为工件。由于某种原因,它没有被拾取。这是重现它的简化版本: 文件夹内容: settings.gradle build.gradle so
是否有人编写过一个查询来同时监视所有 BizTalk 工件。 我的查询不起作用,而且我似乎无法完成它: 这是我的: select RL.Name AS rlName , ('Url:
我最近学习了如何使用 grailsApplication.addArtefact(java.lang.String artefactType, GrailsClass artefactGrailsCl
我想在 Bamboo 构建结束时运行内联脚本任务,以将一些工件复制到网络共享。请问如何在此脚本中引用工件输出目录? Windows 环境(如果这有影响的话)。 最佳答案 您需要configure Ar
我想要一个工件名称,例如game-1.0.%BuilNumber%.jar 其中 BuildNumber 是 teamcity 构建的编号。 我正在使用 gradle 来构建工件。使用该工具是否可行,
在 SBT 中,如果我有一个任务要生成包含一堆文件的 zip/jar/war,我会使用 Defaults.packageTaskSettings 方法来设置该任务。它看起来如下: object Bui
我一直在使用 TeamCity 来启动和运行 CI 环境。 我开始关注 Troy Hunt 的 'You're deploying wrong' ,这非常有用,但是我想将打包和部署分成 2 个单独的步
故事 我已经在 OpenGL 中编码大约一年了(在相同的硬件上),我最近才得到像上图中那样的工件。它们在短时间内(几分钟)连续运行我的程序后出现,并出现在任何地方:从写字板(见图片)到我的桌面和任务栏
我使用以下代码在代码中创建了一个 UITableView: // no xib tableView = new UITableView( new RectangleF(0,0, this.View.F
我是一名优秀的程序员,十分优秀!