"var/task/org/springframework/cglib/core/NamingPolicy.class (权限被拒绝)", "错误类型:java.io.FileNotFoundException"

3

我的应用程序使用Spring boot + batch + gradle + aws Lambda。我对aws lambda功能不熟悉,当我将jar文件上传到s3存储桶中时,该存储桶具有所有的读取对象、读取对象权限和写入对象权限。但是当我测试lambda功能时,出现了FileNotFoundException异常。请问有什么建议吗?

"cause": {
  "errorMessage": "/var/task/org/springframework/cglib/core/NamingPolicy.class (Permission denied)",
  "errorType": "java.io.FileNotFoundException",
  "stackTrace": [
    "java.io.FileInputStream.open0(Native Method)",
    "java.io.FileInputStream.open(FileInputStream.java:195)",
    "java.io.FileInputStream.<init>(FileInputStream.java:138)",
    "sun.misc.URLClassPath$FileLoader$1.getInputStream(URLClassPath.java:1288)",
    "sun.misc.Resource.cachedInputStream(Resource.java:77)",
    "sun.misc.Resource.getByteBuffer(Resource.java:160)",
    "java.net.URLClassLoader.defineClass(URLClassLoader.java:454)",
    "java.net.URLClassLoader.access$100(URLClassLoader.java:73)",
    "java.net.URLClassLoader$1.run(URLClassLoader.java:368)",
    "java.net.URLClassLoader$1.run(URLClassLoader.java:362)",
    "java.security.AccessController.doPrivileged(Native Method)",
    "java.net.URLClassLoader.findClass(URLClassLoader.java:361)",
    "java.lang.ClassLoader.loadClass(ClassLoader.java:424)",
    "java.lang.ClassLoader.loadClass(ClassLoader.java:357)",
    "org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:394)",
    "org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanFactory(ConfigurationClassPostProcessor.java:254)",
    "org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:282)",
    "org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:126)",
    "org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:694)",
    "org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532)",
    "org.springframework.boot.SpringApplication.refresh(SpringApplication.java:762)",
    "org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:398)",
    "org.springframework.boot.SpringApplication.run(SpringApplication.java:330)",
    "org.springframework.boot.SpringApplication.run(SpringApplication.java:1258)",
    "org.springframework.boot.SpringApplication.run(SpringApplication.java:1246)",
    "com.myapp.BatchMain.startApp(BatchMain.java:75)",
    "com.myapp.MyHandler.handleRequest(MyHandler.java:12)",
    "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
    "sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
    "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
    "java.lang.reflect.Method.invoke(Method.java:498)"
  ]
}

编辑 - 我的build.gradle文件

    buildscript {
         ext {
            springBootVersion = '2.0.1.RELEASE'
        }
        repositories {MavenCentral()}

        dependencies {
            classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
            classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.5"
        }
    }

    apply plugin: 'java'
    apply plugin: 'eclipse'
    apply plugin: 'org.springframework.boot'

    mainClassName ="com.myapp.MyHandler"

    sourceCompatibility = 1.8
    targetCompatibility = 1.8

    repositories { mavenCentral()}

    dependencies {

        compile 'org.springframework.batch:spring-batch-core:4.0.0.RELEASE'
        compile 'org.springframework.boot:spring-boot-starter-batch:2.0.4.RELEASE'
        compile 'org.springframework.boot:spring-boot-starter-data-jpa:2.0.4.RELEASE'
        compile 'com.microsoft.sqlserver:mssql-jdbc:6.1.0.jre8'
        compile 'junit:junit:4.12'  
        compile 'com.google.code.gson:gson:2.8.2'
        compile 'log4j:log4j:1.2.17'  
        compile 'org.springframework.boot:spring-boot-maven-plugin:2.0.5.RELEASE'

        compile 'com.amazonaws:aws-lambda-java-core:1.2.0'
        compile 'com.amazonaws:aws-lambda-java-events:2.1.0'
        compile 'ch.qos.logback:logback-classic:1.1.2'

    }

    bootJar {
        mainClassName = 'com.myapp.MyHandler'
    }


    //create a single Jar with all dependencies
      task fatJar(type: Jar) {
        manifest {
            attributes 'Main-Class': 'com.myapp.MyHandler'
        }
        baseName = 'all-in-one-jar'
        from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
        with jar
    }
2个回答

0

我相信你提到的文件是音频/视频文件,与我的工作无关。 - Maana
已更新答案...抱歉之前我理解错了。如果问题仍然存在,请告诉我。 - Alien
我该如何在Gradle中实现这个? - Maana
检查这个以更改Windows中的权限:https://answers.microsoft.com/en-us/windows/forum/windows_vista-files/how-do-i-change-folder-and-file-permissions/465f2b42-63dd-4486-8dd1-c870290efeed - Alien
我已经授予权限,但仍然遇到相同的错误。有什么想法吗?"errorMessage": "/var/task/org/springframework/cglib/core/NamingPolicy.class (Permission denied)", "errorType": "java.io.FileNotFoundException", - Maana
显示剩余4条评论

0
在 build.gradle 中添加 fileMode = 0755 解决了这个问题。
task fatJar(type: Jar) {
manifest {
  attributes 'Main-Class': 'com.myapp.MyHandler'
}
fileMode = 0755

baseName = 'all-in-one-jar'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } 
}
  with jar
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接