每当我尝试使用复制任务将文件复制到项目的根目录(我正在运行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 %}"> <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> </a>
答案 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 '.'
}
}
}