>

내 빌드의 종속성이 일부 읽기 전용 파일을 포함하는 zip 파일 인 문제를 해결하려고합니다. 빌드의 일부로 해당 zip을 추출하면 준비 폴더의 읽기 전용 파일로 끝나고 나중에 덮어 쓸 수 없으므로 작업이 실행되지 않습니다.

gradle 복사 작업에서 강제로 덮어 쓸 수있는 방법이있을 때까지 나는 파일에서 실행 비트를 제거하지 않는 방식으로 읽기 전용 파일의 파일 모드를 변경하는 방법을 찾으려고 노력했습니다 필요합니다.

이 문제를 생각해 냈습니다 :

task stageZip(type: Copy) {
  from({ zipTree(zipFile) })
  into stagingFolder
  eachFile {
    println "${it.name}, oldMode: ${Integer.toOctalString(it.mode)}, newMode: ${Integer.toOctalString(it.mode | 0200)}"
    fileMode it.mode | 0200
  }
}

그러나 작동하지 않습니다. fileMode 줄을 주석 처리하면 println에 모든 파일에 대해 쓰기 비트가 활성화 된 이전 및 새 파일 모드가 올바르게 나열됩니다. 코드를 그대로두면 zip의 모든 파일이 첫 번째 파일의 newMode로 추출됩니다.

이것은 시도하고 해야하는 불합리한 것처럼 보이지 않지만 분명히 뭔가 잘못하고 있습니다. 어떤 제안?

  • 답변 # 1

    이 스레드를 기반으로 동기화 작업을 고려하십시오. 구체적으로 :

    task stageZip(type: Sync) {
        from zipTree('data/data.zip')
        into 'staging'
        fileMode 0644
    }
    
    

    여기서 (질문을 이해하는 것처럼) 실제 예제를 작성했습니다.

  • 답변 # 2

    파일 권한에 관한 질문에 대답하는 방법이 있습니다. 예제는 여기 GitHub에 게시됩니다.

    먼저 w 를 추가하는 방법을 고려하십시오  파일로 :

    import java.nio.file.*
    import java.nio.file.attribute.PosixFilePermission
    def addWritePerm = { file ->
        println "TRACER adding 'w' to : " + file.absolutePath
        def path = Paths.get(file.absolutePath)
        def perms = Files.getPosixFilePermissions(path)
        perms << PosixFilePermission.OWNER_WRITE
        Files.setPosixFilePermissions(path, perms)
    }
    
    

    그런 다음 Gradle 작업은 다음과 같습니다.

    project.ext.stagingFolder = 'staging'
    project.ext.zipFile = 'data/data.zip'
    task stageZip(type: Copy) {
        from({ zipTree(project.ext.zipFile) })
        into project.ext.stagingFolder
        doLast {
            new File(project.ext.stagingFolder).eachFileRecurse { def file ->
                if (! file.canWrite()) {
                    addWritePerm(file)
                }
            }
        }
    }
    
    

  • 이전 php - 지원 중단으로 인해 homebrew를 통해 memcached를 설치할 수 없습니다 PECL도 작동하지 않습니다
  • 다음 css - primeng - p- 패널의 스타일링 크기 및 정렬