Copy类型的gradle任务中出现空指针异常

Copy类型的gradle任务中出现空指针异常,gradle,Gradle,我正在编写一个任务,将文件从一个公共文件夹中的特定位置解压缩,如下所示 class UnzipTask extends DefaultTask{ @TaskAction def unzip(){ def library = [] def comp = [] project.fileTree( dir: 'libs', include: '*.jar').visit { FileVisitDetails details -> if ( !d

我正在编写一个任务,将文件从一个公共文件夹中的特定位置解压缩,如下所示

class UnzipTask extends DefaultTask{
@TaskAction
def unzip(){
def library = []
    def comp = []


        project.fileTree( dir: 'libs', include: '*.jar').visit { FileVisitDetails details ->
            if ( !details.file.name.contains('dev') ) {
                library<< details.file.name
            }
        }
        library.each { fileName ->
            comp << fileName.substring( 0, fileName.length()-4 )
        }
        project.copy{
        comp.each { dist ->
                def dName = dist.substring( 3, dist.lastIndexOf('-') )
                def zipFile = project.file("${libs/${dist}.zip")
                println("this is zipFIle"+zipFile)
                from( project.zipTree( zipFile ))

                {
                    into ( "${distributionName}")
                }
    }

   }

  }
类UnzipTask扩展了DefaultTask{
@任务行动
def解压(){
def库=[]
def comp=[]
fileTree(dir:'libs',include:'*.jar')。访问{FileVisitDetails-details->
如果(!details.file.name.contains('dev')){
图书馆
公司
def dName=dist.substring(3,dist.lastIndexOf('-'))
def zipFile=project.file(“${libs/${dist}.zip”)
println(“这是zipFIle”+zipFIle)
from(project.zipTree(zipFile))
{
进入(“${distributionName}”)
}
}
}
}
现在,当我执行任务时,它给了我NullPointerException,没有其他细节。我不知道还需要什么

这是我在stackTrace中得到的:

原因:java.lang.NullPointerException 位于org.gradle.api.internal.file.IdentityFileResolver.doResolve(IdentityFileResolver.java:39) 位于org.gradle.api.internal.file.AbstractFileResolver.resolve(AbstractFileResolver.java:81) 位于org.gradle.api.internal.file.AbstractFileResolver.resolve(AbstractFileResolver.java:63) 位于org.gradle.api.internal.file.AbstractFileResolver.withBaseDir(AbstractFileResolver.java:59) 位于org.gradle.api.internal.file.DefaultFileLookup.getFileResolver(DefaultFileLookup.java:41) 位于org.gradle.api.internal.file.copy.FileCopier.getCopyVisitor(FileCopier.java:59) 位于org.gradle.api.internal.file.copy.FileCopier.copy(FileCopier.java:49) 位于org.gradle.api.internal.file.DefaultFileOperations.copy(DefaultFileOperations.java:134) 位于org.gradle.api.internal.project.AbstractProject.copy(AbstractProject.java:776) 位于org.gradle.api.internal.project.AbstractProject.copy(AbstractProject.java:772) 位于org.gradle.api.Project$copy$5.call(未知来源) 位于com.vitalconnect.gradle.tasks.UnzipDistributionTask.unzipDist(UnzipDistributionTask.groovy:25) 位于org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75) 位于org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:227) 位于org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:220) 位于org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:209) 位于org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:585) 位于org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:568) 位于org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80) 位于org.gradle.api.internal.tasks.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
…还有60个

您没有定义变量
d
,您定义了
dName
两次。这可能是问题吗?

您没有定义变量
d
,您定义了
dName
两次。这可能是问题吗?

在Gradle 3.1上遇到了同样的问题。正如Gradle工作人员所解释的:

您看到的问题是由于复制规范没有基本目录造成的。不过,错误消息还有很多需要改进的地方。我已经为此打开了窗口

[……]

很简单,每个复制操作都需要调用into(),而不需要闭包参数

[……]

我们在使用复制任务时显式验证这一点,但在出于某种原因调用project.Copy()时则不进行验证

看起来他们给了它一个不会修复状态的标签

就我而言,我需要改变:

copy {
  // wrong, the main spec lacks `into` call, as I do `from("x", {...})`
  from "src/META-INF/persistence.xml", { into "classes/META-INF" }
}
进入:


在Gradle 3.1上遇到了同样的问题。正如Gradle工作人员所解释的:

您看到的问题是由于复制规范没有基本目录造成的。不过,错误消息还有很多需要改进的地方。我已经为此打开了窗口

[……]

很简单,每个复制操作都需要调用into(),而不需要闭包参数

[……]

我们在使用复制任务时显式验证这一点,但在出于某种原因调用project.Copy()时则不进行验证

看起来他们给了它一个不会修复状态的标签

就我而言,我需要改变:

copy {
  // wrong, the main spec lacks `into` call, as I do `from("x", {...})`
  from "src/META-INF/persistence.xml", { into "classes/META-INF" }
}
进入:


你是否有一个StActTrand?这应该包括行数。在另一个注释中,考虑使用更简洁的GISOVY ISH结构,如<代码> DEF COMP=库。收集{f-> f.个子串(0,f长度())4)好的,谢谢,但是现在,如果我从花括号中删除到,代码工作正常。但是这样,我的文件夹名称将是数组中最后一个值的名称。我希望所有值的文件夹名称都是独立的
指定
可配置文件集合
,而
是一个pr
复制
任务/命令的属性(这意味着您不能将
放入
放入
中)。如果您需要两个不同的目标文件夹,则需要两个不同的复制任务,即通过交换
project.copy{/code>和
comp.each{dist->
“${libs/${dist}.zip”中未闭合的大括号一个打印错误?谢谢,这工作了!你没有一个StActTrand?这应该包括行号。在另一个注释中,考虑使用更简洁的GISOY ISH结构,比如“代码> DEF COMP=库。收集{f-> f.个子串(0,f长度())4)
好的,谢谢,但是现在,如果我从花括号中删除到,代码可以正常工作。但是这样,我的文件夹名称将是数组中最后一个值的名称。我希望所有值的文件夹名称都独立于
from
指定
ConfigurableFileCollection
,而
into