Grails 6.1.2 在尝试运行命令时给出“索引 0 处不匹配的参数”

问题描述 投票:0回答:1

使用 Grails 6.1.2 和 Shiro 创建新应用程序。得到这个: Unmatched argument at index 0: 'shiro-quick-start'
Did you mean grails create-service or grails create-restapi or grails create-taglib?

我发现 grails 命令的大部分功能已被删除,我们现在需要使用 gradle。但是,我找到的所有文档都说要使用 grails 命令。

我确实确定了

编译“org.grails.plugins:grails-shiro:4.4”

在build.gradle中

如何使用 gradle 访问这些 grails 命令?

grails
1个回答
0
投票

在 Grails 6 中,引入了改进的命令行界面 (CLI),与前身相比,速度和灵活性都得到了提高。一个显着的增强是消除了冗余任务,例如“grails run-app”。

但是,值得注意的是,此 CLI 完全离线运行,缺乏对 Grails 应用程序或其插件的了解。因此,来自插件的命令将不再按预期运行。

作为替代方案,您可以通过插件实现自定义应用程序命令,该命令可作为 Gradle 任务执行。例如,Grails Spring Security Core Plugin 支持 s2-quickstart 命令,可以执行如下所示:

./gradlew runCommand -Pargs="s2-quickstart"

除了提供的说明之外,我们还提供一个如何在 Grails 插件中创建自定义应用程序命令的示例:

假设我们想在插件中创建一个名为“custom-command”的自定义命令。以下是我们如何实现它:

grails-app/commands/your/plugin/package/CustomCommand.groovy

package your.plugin.package

import grails.cli.GrailsApplicationCommand
import org.springframework.beans.factory.annotation.Autowired

class CustomCommand extends GrailsApplicationCommand {

    static final USAGE = "Usage: grails custom-command [options]"

    static final COMMAND_NAME = 'custom-command'

    @Autowired
    YourService yourService // Assuming you have a service you want to use

    @Override
    String getName() {
        COMMAND_NAME
    }

    @Override
    String getDescription() {
        "This is a custom command example."
    }

    @Override
    String getUsage() {
        USAGE
    }

    @Override
    boolean handle() {
        // Add your custom logic here
        yourService.doSomething()
        println "Executing custom command..."
        return true // Return true to indicate successful execution
    }
}

现在,您可以运行此命令:

./gradlew runCommand -Pargs="custom-command"

或者,您可以将插件依赖项添加到

buildSrc/build.gradle
,如下所示:

repositories {
    mavenLocal()
    mavenCentral()
    maven { url "https://repo.grails.org/grails/core/" }
}

dependencies {
    implementation("com.bertramlabs.plugins:asset-pipeline-gradle:4.3.0")
    implementation("org.grails:grails-gradle-plugin:6.2.1-SNAPSHOT")
    implementation("org.grails.plugins:hibernate5:8.1.0")
    implementation("your.plugin.package:myplugin:1.0.0") { transitive = false }
}

这将添加一个名为

customCommand
的 Gradle 任务,可以执行为:

./gradlew customCommand -Pargs="option1 option2 ..."

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.