Gradle Copy任务导致文件权限问题

时间:2018-01-19 05:10:01

标签: linux gradle permissions

背景

我正在开发一个JetBrains插件。最近,我从 jinja2.exceptions.TemplateNotFound: template\profile.html 转移到Windows系统。我正在尝试像以前一样正确设置所有内容。 注意:我对Linux很新。

问题

当我运行以下Ubuntu脚本时,我遇到了明显的文件权限问题(可以在此问题的error部分中看到)。 注意:每当我构建项目时,都会自动调用此Gradle脚本。它在Windows上也能正常工作。

如果我注释掉Gradle关闭,那么一切正常。 我只需要手动复制所需的文件。

copy{...}

错误

tasks.create(name: "copyJar_v${project['version']}") {

    group GROUP_CHROMATERIAL

    def mostCurrentJarFile = "ChroMATERIAL-${project['version']}.jar"

    // comment this out and there are not errors, but I need to do this copy manually
    copy {
        into '/'    // Copy into project's root folder
        from 'build/libs', {
            include mostCurrentJarFile
            rename mostCurrentJarFile, 'ChroMATERIAL.jar'
        }
    }

}

我尝试了什么

我一直在使用UI来修改FAILURE: Build failed with an exception. * Where: Build file '/home/ciscorucinski/IdeaProjects/ChroMATERIAL/ChroMATERIAL/build.gradle' line: 100 * What went wrong: A problem occurred evaluating project ':ChroMATERIAL'. > Could not copy file '/home/ciscorucinski/IdeaProjects/ChroMATERIAL/ChroMATERIAL/build/libs/ChroMATERIAL-2.5.1.jar' to '/ChroMATERIAL.jar'. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. BUILD FAILED Total time: 0.139 secs /ChroMATERIAL.jar (Permission denied) 오후 12:20:39: Task execution finished 'copyJar_v2.5.1'. 中插件项目文件夹的文件权限。

  1. 我授予每个人IdeaProjects权限和Create and delete files
  2. 每个人都有Change Permissions for Enclosing Files...个文件访问权限和Read and write个文件夹访问权限。
  3. 点击Create and delete files
  4. 再次运行Gradle脚本...相同的错误消息
  5. 思想

    • 看来Linux不允许Gradle修改这些文件。我可以注释掉代码并自己做所有事情,但我需要让Gradle有更高的控制力。不知道怎么回事。
    • 我注意到当我回到Change时,显示的权限不是我选择的权限! Change Permissions for Enclosing Files...具有Others个文件访问权限和Read-only个文件夹访问权限。我不知道这是否是常见的Ubuntu行为,错误或其他原因。
      • 在修复此问题时,知道如何尽可能限制访问将会很高兴。

1 个答案:

答案 0 :(得分:2)

嗯,这是真的 - 你不能(也不应该)将文件复制到linux框中的Root文件夹中。如果您将脚本作为sudo运行,则可以,但这不是一个好主意。

<强>被修改

由于您要复制到项目的根目录,因此可以使用$ {projectDir}或$ {rootDir}。

此外,您应该能够在没有关闭麻烦的情况下执行此操作 - 并且通过使用内置的复制任务使脚本更清晰,恕我直言:

task copyClientLoc(type: Copy) {                  
    from "build/libs/"
    into "${rootDir}"
    include "ChroMATERIAL-${project['version']}.jar"
    fileMode = 0644
}