Uploaded image for project: 'Commons IO'
  1. Commons IO
  2. IO-663

FileUtils.copyDirectory(File srcDir, File destDir) fails on Windows

Attach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Critical
    • Resolution: Fixed
    • None
    • 2.12.0
    • None
    • None

    Description

      This bug is shared (likely because of code copied from one place to another) between the similar methods in commons IO, codehaus-plexus-utils, and maven-shared-utils.

      I don't have an isolated test case because this bug is platform specific and I've only seen it in Jenkins CI builds on Windows using JDK 7 through 15. I don't have a Windows system handy to test it. However it is reproducible.

      Typical code that triggers it is in RestoreBackupPomsPhaseTest in maven-release:

      // copy poms so tests are valid without clean
        File sourceDir = getTestFile( "src/test/resources" + projectPath );
        File testDir = getTestFile( "target/test-classes" + projectPath );
        FileUtils.copyDirectoryStructure( sourceDir, testDir );

      I don't know whether there might be something weird in the setup of those two directories that's involved.

      Typical error message is:

      Caused by: java.nio.file.FileSystemException:
      F:\jenkins\jenkins-slave\workspace\maven-box_maven-release_windows@2@2\windows-jdk8-m3.6.x_build\maven-release-manager\target\test-classes\projects\restore-backup-poms\basic-pom\pom.xml: The process cannot access the file because it is being used by another process

      "The process cannot access the file because it is being used by another process" I think points to the root of the bug. This is a Windows file system error message.

      Some history is here where I noticed it:

      https://github.com/apache/maven-release/pull/42

      In this case, I started with plexus-utils 3.1.0 which worked, upgraded to plexus-utils 3.3.0, which didn't. And then tried the FileUtils.copyDirectory from both maven-shared-utils and commons-io, all of which failed in the same way.

      I think this is caused by the use of NIO, which doesn't work quite the same when copying files on Windows as on Linux and Mac OS X.

      Attachments

        Issue Links

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned
            elharo Elliotte Rusty Harold
            Votes:
            2 Vote for this issue
            Watchers:
            7 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment