[ http://jira.codehaus.org/browse/MSITE-531?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=264471#action_264471 ]
Andrew Phillips commented on MSITE-531: --------------------------------------- OK, so the first part of the fix was relatively simple, replacing the above snippet with {code} String target = UriUtils.normalizePath( destinationDirectory + "/" + listFiles[i].getName() ); if ( listFiles[i].isDirectory() ) { putDirectory( listFiles[i], target ); } else { put( listFiles[i], target ); } {code} where {{normalizePath}} simply calls {{URI.normalize()}} [1]. This would be enough in this test case, but in a multi-module project Maven produces URLs like https://jclouds.googlecode.com/svn/maven-sites/jclouds-project/1.0-SNAPSHOT/../../../jclouds-project/1.0-SNAPSHOT/css/maven-base.css and Google Code is also not able to deal with the '../../..' part. Unfortunately, that bit sits inside the repository URL [2], which isn't so easily accessible. One reasonable place to intercept this repo whilst limiting the effects to the WebDavWagon is to intercept the original {{connect}} method in AbstractWagon [3] as follows: {code} public void connect( Repository repository, AuthenticationInfo authenticationInfo, ProxyInfoProvider proxyInfoProvider ) throws ConnectionException, AuthenticationException { repository.setUrl( UriUtils.normalizeUrl( repository.getUrl(), repository.getBasedir() ) ); super.connect( repository, authenticationInfo, proxyInfoProvider ); } {code} {{normalizeUrl}} has to do some slightly funky things here because Maven Wagon's PathUtils [4] aren't able to deal with a 'dav:https' URL properly, but the test cases all pass. [1] http://download.oracle.com/javase/6/docs/api/java/net/URI.html#normalize() [2] http://maven.apache.org/plugins/maven-site-plugin/xref/org/apache/maven/plugins/site/wagon/repository/Repository.html [3] http://maven.apache.org/wagon/wagon-provider-api/xref/org/apache/maven/wagon/AbstractWagon.html [4] http://maven.apache.org/plugins/maven-site-plugin/xref/org/apache/maven/plugins/site/wagon/PathUtils.html > Site deployment fails on googlecode repository (unnecessary '/./' path > element in WebDAV URL) > --------------------------------------------------------------------------------------------- > > Key: MSITE-531 > URL: http://jira.codehaus.org/browse/MSITE-531 > Project: Maven 2.x and 3.x Site Plugin > Issue Type: Bug > Components: site:deploy > Affects Versions: 2.1, 3.0-beta-3 > Environment: Maven 2.2.1, 3.0.1, wagon-webdav 1.0-beta-2, > wagon-webdav-jackrabbit 1.0-beta-7 > Reporter: Marcin Kuthan > > Hi, > I configured my project to use Wagon WebDAV provider to deploy project > site. In general it works as I expected but it fails if the site is > deployed on googlecode. > Transfer error: org.apache.maven.wagon.TransferFailedException: Failed > to transfer file: > https://m4enterprise.googlecode.com/svn/site/./css/maven-base.css. > Return code is: 500 > [ERROR] Failed to execute goal > org.apache.maven.plugins:maven-site-plugin:3.0-beta-3:deploy > (default-deploy) on project corporate-pom: Error uploading site: > Failed to transfer file: > https://m4enterprise.googlecode.com/svn/site/./css/maven-base.css. > Return code is: 500 -> [Help 1] > org.apache.maven.lifecycle.LifecycleExecutionException: Failed to > execute goal org.apache.maven.plugins:maven-site-plugin:3.0-beta-3:deploy > (default-deploy) on project corporate-pom: Error uploading site > at > org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:203) > > at > org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148) > > at > org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:140) > > 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:316) > at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:153) > at org.apache.maven.cli.MavenCli.execute(MavenCli.java:451) > at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:188) > at org.apache.maven.cli.MavenCli.main(MavenCli.java:134) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > > at java.lang.reflect.Method.invoke(Method.java:616) > 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: Error uploading > site > at > org.apache.maven.plugins.site.SiteDeployMojo.execute(SiteDeployMojo.java:271) > at > org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:107) > > at > org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:195) > > ... 19 more > Caused by: org.apache.maven.wagon.TransferFailedException: Failed to > transfer file: > https://m4enterprise.googlecode.com/svn/site/./css/maven-base.css. > Return code is: 500 > at > org.apache.maven.wagon.shared.http.AbstractHttpClientWagon.put(AbstractHttpClientWagon.java:368) > > at > org.apache.maven.wagon.shared.http.AbstractHttpClientWagon.put(AbstractHttpClientWagon.java:280) > > at > org.apache.maven.wagon.providers.webdav.WebDavWagon.putDirectory(WebDavWagon.java:188) > > at > org.apache.maven.wagon.providers.webdav.WebDavWagon.putDirectory(WebDavWagon.java:182) > > at > org.apache.maven.plugins.site.SiteDeployMojo.execute(SiteDeployMojo.java:257) > ... 21 more > I filled an issue in googlecode bug tracker > (http://code.google.com/p/support/issues/detail?id=4786). There is a > suspicion that '/./' part of URL is an error cause. > It has been discussed also on Maven mailing list: > http://maven.40175.n5.nabble.com/How-to-avoid-part-of-URL-during-site-deployment-td3307034.html > Thanks, > Marcin -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira