Grails3.1.4和Docker-Grails命令返回;未找到名称为“web”的配置文件;

Grails3.1.4和Docker-Grails命令返回;未找到名称为“web”的配置文件;,grails,gradle,docker,grails-3.1,Grails,Gradle,Docker,Grails 3.1,我有一个简单的grails应用程序,它本身运行良好。将grails web概要文件与grails run app 但是,当我从应用程序构建docker映像时,grails命令,例如grails run app--stacktrace或grails dependency report--stacktrace发送到docker的命令会因stacktrace而失败: | Error Error occurred running Grails CLI: No profile found for name

我有一个简单的grails应用程序,它本身运行良好。将grails web概要文件与
grails run app

但是,当我从应用程序构建docker映像时,grails命令,例如
grails run app--stacktrace
grails dependency report--stacktrace
发送到docker的命令会因stacktrace而失败:

| Error Error occurred running Grails CLI: No profile found for name [web]. (NOTE: Stack trace has been filtered. Use --verbose to see entire trace.)
java.lang.IllegalStateException: No profile found for name [web].
    at org.grails.cli.GrailsCli.initializeProfile(GrailsCli.groovy:507)
    at org.grails.cli.GrailsCli.initializeApplication(GrailsCli.groovy:308)
    at org.grails.cli.GrailsCli.execute(GrailsCli.groovy:271)
    at org.grails.cli.GrailsCli.main(GrailsCli.groovy:162)
| Error Error occurred running Grails CLI: No profile found for name [web].
Docker生成命令: 从grails应用程序的根目录运行。 用户在docker组中

docker build -t mygrailsapp .
DockerFile: (在运行grails dependency report--stacktrace时,生成将失败。如果我删除该命令,生成将完成。但是,第一次使用默认命令运行应用程序时,它将失败,并出现相同的错误。)

设置:

Ubuntu 14.04 LTS 64

Jave:oraclejdk1.8.0Ṕ

通过sdkman 4.0.32:

圣杯3.14 Groovy 2.4.6 格拉德尔2.12

码头工人 客户: 版本:1.10.3 API版本:1.22 Go版本:go1.5.3 Git提交:20f81dd 建造时间:2016年3月10日星期四15:54:52
我找到了答案。我不得不从github下载grails配置文件并将它们安装在$grails\u HOME中。在docker文件中设置Grails环境变量之后,我立即执行了这一步骤

请参见下面的docker文件片段示例:

...
# Setup Grails path.
ENV GRAILS_HOME /usr/lib/jvm/grails    
ENV PATH $GRAILS_HOME/bin:$PATH

# Setup grails profiles
RUN wget https://codeload.github.com/grails/grails-profile-repository/zip/master && \
    unzip master && \
    mv grails-profile-repository-master/profiles/ $GRAILS_HOME && \
    rm -rf master && \
    rm -rf grails-profile-repository-master
...

当我将使用
web
配置文件的grails3.1.4应用程序移动到一台新机器时,我遇到了同样的问题


在我的应用程序根目录中执行
gradle clean
触发了Grails Maven依赖项的下载,之后
Grails
命令开始工作。

对于其他有此问题的人,我只是删除了(或者只是移动了一下以防需要它)我的构建文件夹,然后再次运行,它重新下载了所有依赖项并立即工作

我用next修复了它:

  • 删除(或重命名)
    .gradle
    目录
  • 删除(或重命名)
    gradle
    目录
  • 删除(或重命名)
    build
    目录

  • 现在,我可以使用
    grailsrun-app

    运行应用程序来改善这种情况,您可以设置
    GRADLE\u USER\u HOME
    env-var,这样您就不必在第一次运行Docker之前每次运行
    rm
    build目录,实际上,删除
    build/.dependencies
    文件就可以做到这一点

    VOLUME ["/gradle"]
    ENV GRADLE_USER_HOME /gradle
    

    我从Dockerfile中删除了运行依赖项报告,它解决了这个问题

    但是,这意味着依赖项不再安装到映像中,必须在首次创建容器时下载。这不是一个理想的情况

    我不明白为什么在运行应用程序时需要web配置文件。我认为概要文件规定了用于设置grails应用程序的模板。一旦完成,为什么在运行时需要它?“网络档案”到底是什么。它是一个可以下载并添加的单一文件吗

    另一个奇怪之处是,从mozart/grails创建的带有运行依赖关系报告的映像在windows docker toolbox上运行良好,但在linux docker上运行失败。我不明白同一张图片在不同的docker平台上会有不同的行为。我以为这就是docker的重点


    很抱歉,这里提供的问题比答案多,但希望能更好地理解所有这些。

    我已通过删除
    构建
    文件来解决此问题。通过删除并再次运行,可能会解决此问题

    我选择删除它,因为我甚至不能调用grails函数

    很可能是因为您在搜索引擎中搜索了错误,它将您带到了这里,所以您登录到了此页面

    症状:当您在以前拥有的现有项目下运行“grails”时(在不同的PC上或从GIT或SVN之类的源代码管理运行,并且您错误地包含了“build”目录)


    请参阅此

    为我介绍,它通过在
    gradle clean
    grails
    之后使用命令
    /gradlew install
    工作


    grails
    命令安装了依赖项,并且
    /gradlew install
    解决了所有后续错误

    添加
    --verbose
    时会发生什么?我已经尝试过--verbose。不幸的是,它没有添加任何新信息。grails仍然抛出
    未找到名称[angular]
    的配置文件。有没有办法“刷新”配置文件?我使用基本图像。处理我的问题。当我试图将grails与错误版本的vaadin插件一起使用时,我收到了错误消息(grails 3.1使用的是8:0.3而不是8:0.2),我没有找到名称[web]的配置文件,但删除后,我再次出现在
    java.lang.ClassCastException:jdk.internal.loader.ClassLoaders$AppClassLoader(在module:java.base中)不能转换为java.net.URLClassLoader(在module:java.base中)
    当给出这样的建议时,请告诉我们为什么您认为它可以解决问题。@KalaBalik Hi kala,我认为提供链接就足够了。谢谢您的评论,我会尝试将其作为一个好习惯。谢谢朋友(顺便说一句,我已经更新了我的答案)谢谢你提供更多的信息。这可能会对某人有所帮助,但是,如果你不会得到最初提问者的太多关注,不要失望,因为这个问题是一年半前提出来的。
    VOLUME ["/gradle"]
    ENV GRADLE_USER_HOME /gradle