java - 如何正确取消 Nexus 任务(作为可执行脚本)?

标签 java groovy nexus nexus3

我为 Nexus 存储库编写了一个清理脚本,该脚本通过调用第三方系统的剩余接口(interface)来验证是否使用了组件。长话短说:由于组件数量和网络流量的原因,该脚本的运行时间很长。所以它需要可以取消,随着这个要求,我的问题越来越多。

该脚本是用groovy编写的,并使用nexus的任务接口(interface)手动执行。使用“执行脚本”骨架创建了一个新任务。当尝试停止任务时,它仅在日志中指出:

admin org.sonatype.nexus.quartz.internal.task.QuartzTaskJob - Task not cancelable: 'TEST' [script]

不幸的是,nexus 的示例脚本都很短且方便,没有人使用取消功能本身。

因此,在查找建议的 QuartzTaskJob 的来源时,我发现这是 Nexus 任务的包装器,它应该由 QuartzSchedulerSPI 自动使用。

因此,我实现了它的虚拟版本,以使用已实现的任务(例如 RestoreMetadataTask)作为示例来测试它。首先是在其中使用 sleep() ,第二次尝试是您在下面的代码引用中看到的 for 循环。两次尝试都有相同的悲伤结局。

import org.sonatype.nexus.scheduling.Cancelable;
import org.sonatype.nexus.scheduling.TaskSupport;

public class CancelableTask
extends TaskSupport
implements Cancelable

{
    @Override
    public String getMessage(){
        return null
    }

    @Override
    protected Void execute() throws  Exception{
        log.info("Start TimeTestCancel")
        for(int i = 0; i < 1000000000000; i++){
            for(int j = 0; j < 1000000000000; j++) {
                if (isCanceled()) {
                    log.info(i)
                    break;
                }
            }
        }
        log.info("Finished TimeTestCancel")
    }
}

sleep 和循环:在 Nexus 3.7.1-02 上测试时,它只是将状态更改为“已阻止”,显示“停止”按钮,但按下该按钮时再次显示“任务不可取消”。无法删除或更改它们。 只是循环:在 Nexus 3.21.1-01 上测试时,它执行得非常快,我无法尝试取消它。

所以我基本上问自己我错过了什么?有没有办法将可取消的作业作为常规脚本来使用?或者我是否必须实现一个 Nexus 插件来实现我的目标?

最佳答案

并非所有任务都可以取消。您可以在 issues.sonatype.com 中提出问题来询问此问题,但是,脚本接口(interface)存在安全问题,并且在较新版本的 NXRM3 中不再启用。我怀疑它最终会被 REST API 取代。

关于java - 如何正确取消 Nexus 任务(作为可执行脚本)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61319315/

相关文章:

java - Ical4j。 RFC5545。计算事件发生次数、持续时间 hack

ansible - 如何使用ansible playbook在 "nexus local user and role"中创建 "sonatype nexus"

java - 对话框中确定按钮上的对象未找到错误

java - 规则的 Sonar 名称 [repository=xxx key=yyy] 为空

xml - 如何使用 groovy xml 生成器创建 namespace 属性

groovy - 使用 metaClass 模拟 Gradle project.exec {...}

java - Maven 版本 :update not updating the given version, 与存储库进行比较并更新到最新版本而不是给定版本

android - Maven依赖解析问题

java - 如何获取div内容selenium下面的所有li

java - 如何找出 Mule 流状态