Maven WAR Plugin
  1. Maven WAR Plugin
  2. MWAR-278

Overlay Task execution fails in windows with java.io.IOException[The filename, directory name, or volume label syntax is incorrect], when targetPath is present

    Details

    • Type: Bug Bug
    • Status: Open Open
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: 2.2
    • Fix Version/s: None
    • Component/s: overlay
    • Labels:
      None
    • Environment:
      Windows
    • Number of attachments :
      1

      Description

      Thanks for introducing the "Overlay concept", which is very helpful. we have a scenario in which we need to overlay a war file over the other.

      maven install is failing with java.io exception when we build the module in WINDOWS with some path in the overlays:overlay:targetpath tag(its works fine in the mac/linux/unix/solaris).

      Trace :
      ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project xxxxxx: Failed to copy file for overlay [ id xxxxxxx:yyyyyyyy]: The filename, directory name, or volume label syntax is incorrect -> [Help 1]
      org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project xxx-xxxx: Failed to copy file for overlay [ id xxxxxxx:yyyyyyyy].

      Root Cause:
      As per the analysis that we had performed, its a code bug. Please refer line# 84-88 present in the http://code.google.com/p/maven-alfresco-archetypes/source/browse/trunk/plugins/maven-amp-plugin/src/main/java/org/alfresco/maven/plugin/amp/packaging/OverlayPackagingTask.java?r=127.

      ie;
                       String targetPath = overlay.getTargetPath();
                          if (!targetPath.endsWith( "/" ))
                          

      {                         targetPath = targetPath + "/";                     }

      by considering the above code snippet as a source of truth, windows will not recognize the forward slash ("/") as a valid file separator. file separator would vary from OS to OS, and hence It must not be hardcoded(it works fine in linux and mac, since the file separator for these operating systems are "/").

      System.getProperties("file.separator") can be used for computing the file separator during runtime. Please do the needful. Thanks in advance

      Stack Trace :
      [DEBUG] OverlayPackagingTask performPackaging overlay.getTargetPath() C:\projects\xxxxxxx\yyyyyy\target
      [INFO] Processing overlay [ id xxxxxxx:yyyyyyyy]
      [DEBUG] Overlay [ id xxxxxxx:yyyyyyyy] was already unpacked
      ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project enrollment-rest: Failed to copy file for overlay [ id xxxxxxx:yyyyyyyy]: The filename, directory name, or volume label syntax is incorrect -> [Help 1]
      org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project xxx-xxxx: Failed to copy file for overlay [ id xxxxxxx:yyyyyyyy].
      at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217)
      at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
      at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
      at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
      at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
      at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
      at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
      at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:319)
      at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
      at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
      at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
      at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:597)
      at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
      at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
      at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
      at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
      Caused by: org.apache.maven.plugin.MojoExecutionException: Failed to copy file for overlay [ id xxxxxxxxx:yyyyyyyyy]
      at org.apache.maven.plugin.war.packaging.OverlayPackagingTask.performPackaging(OverlayPackagingTask.java:97)
      at org.apache.maven.plugin.war.AbstractWarMojo.buildWebapp(AbstractWarMojo.java:472)
      at org.apache.maven.plugin.war.AbstractWarMojo.buildExplodedWebapp(AbstractWarMojo.java:404)
      at org.apache.maven.plugin.war.WarMojo.performPackaging(WarMojo.java:215)
      at org.apache.maven.plugin.war.WarMojo.execute(WarMojo.java:177)
      at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
      at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
      ... 19 more
      Caused by: java.io.IOException: The filename, directory name, or volume label syntax is incorrect
      at java.io.WinNTFileSystem.canonicalize0(Native Method)
      at java.io.Win32FileSystem.canonicalize(Win32FileSystem.java:396)
      at java.io.File.getCanonicalPath(File.java:559)
      at org.codehaus.plexus.util.FileUtils.copyFile(FileUtils.java:1042)
      at org.apache.maven.plugin.war.packaging.AbstractWarPackagingTask.copyFile(AbstractWarPackagingTask.java:293)
      at org.apache.maven.plugin.war.packaging.AbstractWarPackagingTask$1.registered(AbstractWarPackagingTask.java:150)
      at org.apache.maven.plugin.war.util.WebappStructure.registerFile(WebappStructure.java:211)
      at org.apache.maven.plugin.war.packaging.AbstractWarPackagingTask.copyFile(AbstractWarPackagingTask.java:145)
      at org.apache.maven.plugin.war.packaging.AbstractWarPackagingTask.copyFiles(AbstractWarPackagingTask.java:103)
      at org.apache.maven.plugin.war.packaging.OverlayPackagingTask.performPackaging(OverlayPackagingTask.java:92)
      ... 25 more

      1. Overlay.tar
        38 kB
        Tony Kollamparambil

        Activity

        Show
        Tony Kollamparambil added a comment - http://svn.apache.org/viewvc/maven/plugins/tags/maven-war-plugin-2.2/src/main/java/org/apache/maven/plugin/war/packaging/OverlayPackagingTask.java?revision=1235489&view=co
        Hide
        Tony Kollamparambil added a comment -

        sorry for the typo, please read 'maven-tomcat-plugin' as maven-war-plugin:overlays

        Show
        Tony Kollamparambil added a comment - sorry for the typo, please read 'maven-tomcat-plugin' as maven-war-plugin:overlays
        Hide
        Stéphane Nicoll added a comment - - edited

        I know that the forward slash is the separator on linux and macos but Java does not care that much about that and is able to compute file structure with the forward slash on windows as well. Anyway you seem to have hit a corner case but you're not giving me a project that I can use to reproduce.

        Can you please attach a sample project that reproduces the issue?

        Show
        Stéphane Nicoll added a comment - - edited I know that the forward slash is the separator on linux and macos but Java does not care that much about that and is able to compute file structure with the forward slash on windows as well. Anyway you seem to have hit a corner case but you're not giving me a project that I can use to reproduce. Can you please attach a sample project that reproduces the issue?
        Hide
        Tony Kollamparambil added a comment - - edited

        Please find the attached tar file.
        Goal : We need to deploy both common-rest.war and apps-rest.war into one maven-tomcat container without fusing it together.
        Problem statement : attached project compiles in linux/Mac but not in windows

        Please refer to Overlay/apps/pom.xml for more details

        Show
        Tony Kollamparambil added a comment - - edited Please find the attached tar file. Goal : We need to deploy both common-rest.war and apps-rest.war into one maven-tomcat container without fusing it together. Problem statement : attached project compiles in linux/Mac but not in windows Please refer to Overlay/apps/pom.xml for more details

          People

          • Assignee:
            Unassigned
            Reporter:
            Tony Kollamparambil
          • Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated: