Gradle - 将文件复制到项目根目录时出错

时间:2017-12-18 18:04:49

标签: gradle

每当我尝试使用复制任务将文件复制到项目的根目录(我正在运行gradle的同一文件夹)时,我收到以下错误:

  

无法为文件内容创建MD5哈希。

我认为这与我从Artifactory中提取的文物有关,但这似乎是无关的。我用最小的脚本得到了相同的结果。

我正在做的事情有什么明显的错误,或Gradle故意不允许这样的事情?

 <select class="form-control" style="width:50%;" id='selectedTask' name ='selectedTask' onchange='populateProject(this.id,"selectedProject")'>
            <option value="-1" >Select your Task</option>
            {% for task in all_tasks %}
                <option value="{{task.task_id}}">{{task.task_name}}</option>
            {% endfor %}
</select>
<a href="{% url 'projects:edit_task' selectedTaskId %}">
                    &nbsp;&nbsp;<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
</a>

1 个答案:

答案 0 :(得分:1)

简答:不要复制到项目目录中,最好使用into "$buildDir/someFolder",以便文件夹与此单个任务隔离,同时也是由gradle clean

清理

长答案: Gradle的核心是,每个任务都有一个“UP-TO-DATE”检查的概念。如果Gradle发现自上次执行任务以来没有任何变化,它将使用旧结果而不是再次执行。

通过对任务输入和任务输出进行“哈希”来实现UP-TO-DATE检查。由于您使用的是into '.',这意味着项目目录的全部内容被视为任务输出(错误)

Gradle使用.gradle文件夹作为临时文件(例如任务哈希)这可能是其中一些文件因写入而被锁定,因为Gradle正在尝试同时读取相同的文件(以计算任务的“哈希”)输出)导致你看到的错误

*编辑*

如果由于遗留原因需要复制到项目目录中,可以直接使用Project.copy(...)而不是Copy任务。在这种情况下,您可以手动管理任务输入/输出

例如

task customCopy {
    inputs.file "$buildDir/someFile.txt"
    outputs.file 'someFile.txt'
    doLast {
        copy {
            from "$buildDir/someFile.txt"
            into '.'
        }
    }
}