当前位置: 首页 > 知识库问答 >
问题:

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

卫开济
2023-03-14

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

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}")
                }
    }

   }

  }

现在,当我执行任务时,它会给我NullPointerException,而没有其他细节。我不知道还需要什么。

这是我在stackTrace中得到的信息:

原因:java。org上的lang.NullPointerException。格雷德尔。应用程序编程接口。内部的文件IdentityFileResolver。doResolve(IdentityFileResolver.java:39)位于org。格雷德尔。应用程序编程接口。内部的文件抽象文件解析程序。在org上解析(AbstractFileResolver.java:81)。格雷德尔。应用程序编程接口。内部的文件抽象文件解析程序。在org上解析(AbstractFileResolver.java:63)。格雷德尔。应用程序编程接口。内部的文件抽象文件解析程序。org上的basedir(AbstractFileResolver.java:59)。格雷德尔。应用程序编程接口。内部的文件DefaultFileLookup。org上的getFileResolver(DefaultFileLookup.java:41)。格雷德尔。应用程序编程接口。内部的文件复制文件复印机。getCopyVisitor(FileCopier.java:59)位于org。格雷德尔。应用程序编程接口。内部的文件复制文件复印机。在org上复制(FileCopier.java:49)。格雷德尔。应用程序编程接口。内部的文件DefaultFileOperations。在org上复制(DefaultFileOperations.java:134)。格雷德尔。应用程序编程接口。内部的项目抽象项目。在org上复制(AbstractProject.java:776)。格雷德尔。应用程序编程接口。内部的项目抽象项目。在org上复制(AbstractProject.java:772)。格雷德尔。应用程序编程接口。项目$copy$5。在com上拨打(未知来源)。vitalconnect。格雷德尔。任务。解压分发任务。unzipDist(UnzipDistributionTask.groovy:25)位于org。格雷德尔。内部的反映JavaMethod。在org上调用(JavaMethod.java:75)。格雷德尔。应用程序编程接口。内部的项目taskfactory。AnnotationProcessingTaskFactory$StandardTaskAction。doExecute(AnnotationProcessingTaskFactory.java:227)位于org。格雷德尔。应用程序编程接口。内部的项目taskfactory。AnnotationProcessingTaskFactory$StandardTaskAction。在org上执行(AnnotationProcessingTaskFactory.java:220)。格雷德尔。应用程序编程接口。内部的项目taskfactory。AnnotationProcessingTaskFactory$StandardTaskAction。在org上执行(AnnotationProcessingTaskFactory.java:209)。格雷德尔。应用程序编程接口。内部的AbstractTask$TaskActionWrapper。在org上执行(AbstractTask.java:585)。格雷德尔。应用程序编程接口。内部的AbstractTask$TaskActionWrapper。在org上执行(AbstractTask.java:568)。格雷德尔。应用程序编程接口。内部的任务。处决ExecuteActionsTaskExecuter。org上的executeAction(ExecuteActionsTaskExecuter.java:80)。格雷德尔。应用程序编程接口。内部的任务。处决ExecuteActionsTaskExecuter。executeActions(ExecuteActionsTaskExecuter.java:61)。。。60多

共有2个答案

董奇思
2023-03-14

在Gradle 3.1上遇到了同样的问题。正如gradle团队在论坛帖子中所解释的:

您看到的问题是由于复制规范没有基本目录造成的。不过,这个错误消息还有很多需要改进的地方。我为此开通了GRADLE-34064。

[...]

很简单,每个复制操作都需要调用()w/o一个闭包参数

[...]

我们在使用复制任务时显式验证了这一点,但在调用project时却没有。出于某种原因复制()。

似乎他们给了它一个不会修复状态的标签。

在我的情况下,我需要改变:

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

进入:

copy {
  // now ok
  from "src/META-INF/persistence.xml"
  into "classes/META-INF"
}
钮刚洁
2023-03-14

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

 类似资料:
  • 我和我的朋友正在开发一个JavaFX应用程序,它充当我们学校的规划器。我们有任务(课堂作业)、事件、课程和学生信息。为了将数据持久地存储在用户的硬盘上,我们使用了JAXB。 我们已经注释了我们的类,并且可以成功地在包装器中整理任务类。问题是解组文件。 > 混淆名称和注释。命名似乎不是问题所在。 确定文件位置以确保其正确。 确定知道的类。它同时识别和类。 sysouting。它在内存中显示了一个有效

  • 以下是在sun.reflect.nativeMethodAccessorImpl.Invoke0(本机方法)在sun.reflect.nativeMethodAccessorImpl.Invoke(未知源)在sun.reflect.NativeMethodAccessorImpl.Invoke(未知源)在java.lang.Reflect.Method.Invoke(未知源)在com.codena

  • 问题内容: 我正在android中做一个应用程序,因此我需要访问com.android.internal.telephony API。现在,我可以访问这些API了,但问题是,无论我在自己的类中调用Class Call.java方法的什么地方,都会抛出。您可以在http://hi- android.info/src/com/android/internal/telephony/Call.java.h

  • 我正在创建一个包含教授字段的表单,这个字段是id(长)、nome(字符串)、username(字符串)、email(字符串)和curso_coord(curso),因为curso是一个类课程的引用变量。 我尝试了curso.get(0).getid()来解决这个问题,但这是不够的 2019-10-04 15:37:00.700错误17580---[nio-8081-exec-1]C.P.P.Con

  • 我正在尝试使用selenium webdriver、testng和page Factory实现自动化。但我面临空指针异常。

  • > 单击 受保护得空onPrepareDialog(int id,Dialog Dialog) 受保护的对话框onCreateDialog(int id) 如果我对timepickerdialog代码做了什么错误,请告诉我。