Issue Details (XML | Word | Printable)

Key: MNG-2900
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Major Major
Assignee: Jason van Zyl
Reporter: Jason van Zyl
Votes: 0
Watchers: 3
Operations

If you were logged in you would be able to see more operations.
Maven 2

Extensions that have no declared dependency on plexus-utils yet need it at runtime will fail.

Created: 25/Mar/07 12:44 PM   Updated: 27/Jun/07 06:48 PM
Component/s: None
Affects Version/s: None
Fix Version/s: 2.0.6

Time Tracking:
Not Specified

Complexity: Intermediate


 Description  « Hide
This is happening with the WebDAV Wagon:

java.lang.NoClassDefFoundError: org/codehaus/plexus/util/StringUtils
at org.apache.maven.wagon.providers.webdav.WebDavWagon.put(WebDavWagon.java:192)
at org.apache.maven.artifact.manager.DefaultWagonManager.putRemoteFile(DefaultWagonManager.java:237)
at org.apache.maven.artifact.manager.DefaultWagonManager.putArtifact(DefaultWagonManager.java:153)
at org.apache.maven.artifact.deployer.DefaultArtifactDeployer.deploy(DefaultArtifactDeployer.java:80)
at org.apache.maven.plugin.deploy.DeployMojo.execute(DeployMojo.java:162)
at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:443)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:539)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:480)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:459)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:311)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:278)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:143)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:334)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:125)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:272)
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:585)
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)



 All   Comments   Work Log   Change History      Sort Order: Ascending order - Click to sort in descending order
Jason van Zyl added a comment - 25/Mar/07 01:11 PM
Fixed in the same way we do for plugins that use, but don't specy plexus-utils.

Stephane Nicoll added a comment - 26/Mar/07 08:01 AM
Jason, this one misses a fix version right?

Brill Pappin added a comment - 07/May/07 12:04 PM
This appears to be "fixed" but is defiantly still broken... and the only message in the ticket is "Fixed in the same way we do for plugins that use, but don't specy plexus-utils."... Would anyone care to elaborate on what this magical fix is?

Jason van Zyl added a comment - 26/Jun/07 01:46 AM
The classloader for the extension is search to see if plexus-utils is present, if it is then the version specifed by the extension is used. If it is not, then version 1.1 of plexus-utils is inserted into the classloader to replicate the behavior of 2.0.5.

Jason van Zyl added a comment - 26/Jun/07 02:05 AM
In this particular case we are dealing with the webdav extension and this is what we use for Plexus and we deploy all the time. And my test server that has WebDAV enables works without error. Now if you have other extensions that are not WebDAV but something else then we need the specific setup. You can't just say categorically that it doesn't work when this stack track deals specifically with the WebDAV extension. If you are using WebDAV then we need to see the POM for anything else that may be causing you problems.

Calin Medianu added a comment - 27/Jun/07 02:48 PM
Hi,

In 2.0.7 the error has changed, but it it still not possible to do a DAV upload from the command line. in 2.0.6 I was getting the StringUtils stacktrace.

$ ./mvn.bat deploy:deploy-file -DgroupId=test.case -DartifactId=GWT-Stuff -Dversion=20070309 -DgeneratePom=true -Dpackaging=jar -DrepositoryId=server -Durl=dav:http://server:7777/maven2/sandbox -Dfile=GWT-Stuff.jar

[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'deploy'.
[INFO] ---------------------------------------------------------------------------
-
[INFO] Building Maven Default Project
[INFO] task-segment: [deploy:deploy-file] (aggregator-style)
[INFO] ---------------------------------------------------------------------------
-
[INFO] [deploy:deploy-file]
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error deploying artifact: Unsupported Protocol: 'dav': Cannot find wagon wh
ich supports the requested protocol: dav

Component descriptor cannot be found in the component repository: org.apache.maven
.wagon.Wagondav.
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Wed Jun 27 12:40:22 PDT 2007
[INFO] Final Memory: 2M/5M
[INFO] ------------------------------------------------------------------------

org.apache.maven.lifecycle.LifecycleExecutionException: Error deploying artifact:
Unsupported Protocol: 'dav': Cannot find wagon which supports the requested protoc
ol: dav
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(Defaul
tLifecycleExecutor.java:564)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGo
al(DefaultLifecycleExecutor.java:493)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(Default
LifecycleExecutor.java:463)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandl
eFailures(DefaultLifecycleExecutor.java:311)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments
(DefaultLifecycleExecutor.java:224)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLife
cycleExecutor.java:143)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:334)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:125)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:280)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.ja
va:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccesso
rImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Caused by: org.apache.maven.plugin.MojoExecutionException: Error deploying artifac
t: Unsupported Protocol: 'dav': Cannot find wagon which supports the requested pro
tocol: dav
at org.apache.maven.plugin.deploy.DeployFileMojo.execute(DeployFileMojo.ja
va:243)
at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginM
anager.java:443)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(Defaul
tLifecycleExecutor.java:539)
... 16 more
Caused by: org.apache.maven.artifact.deployer.ArtifactDeploymentException: Error d
eploying artifact: Unsupported Protocol: 'dav': Cannot find wagon which supports t
he requested protocol: dav
at org.apache.maven.artifact.deployer.DefaultArtifactDeployer.deploy(Defau
ltArtifactDeployer.java:94)
at org.apache.maven.plugin.deploy.DeployFileMojo.execute(DeployFileMojo.ja
va:239)
... 18 more
Caused by: org.apache.maven.wagon.TransferFailedException: Unsupported Protocol: '
dav': Cannot find wagon which supports the requested protocol: dav
at org.apache.maven.artifact.manager.DefaultWagonManager.putRemoteFile(Def
aultWagonManager.java:184)
at org.apache.maven.artifact.manager.DefaultWagonManager.putArtifact(Defau
ltWagonManager.java:153)
at org.apache.maven.artifact.deployer.DefaultArtifactDeployer.deploy(Defau
ltArtifactDeployer.java:80)
... 19 more
Caused by: org.apache.maven.wagon.UnsupportedProtocolException: Cannot find wagon
which supports the requested protocol: dav
at org.apache.maven.artifact.manager.DefaultWagonManager.getWagon(DefaultW
agonManager.java:128)
at org.apache.maven.artifact.manager.DefaultWagonManager.putRemoteFile(Def
aultWagonManager.java:178)
... 21 more
Caused by: org.codehaus.plexus.component.repository.exception.ComponentLookupExcep
tion: Component descriptor cannot be found in the component repository: org.apache
.maven.wagon.Wagondav.
at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContaine
r.java:323)
at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContaine
r.java:440)
at org.apache.maven.artifact.manager.DefaultWagonManager.getWagon(DefaultW
agonManager.java:124)
... 22 more

Thank you,

Calin


Jason van Zyl added a comment - 27/Jun/07 03:16 PM
We need your POM as you must have something different. I upload via WebDAV all day with 2.0.7 as I did with 2.0.6. I need to see the project.

Calin Medianu added a comment - 27/Jun/07 04:03 PM
Thank you for your reply.

There is no POM or project. With this command line I am trying to upload (deploy:deploy-file) a pomless jar into the repository. The command line is:

./mvn.bat deploy:deploy-file -DgroupId=test.case -DartifactId=GWT-Stuff -Dversion=20070309 -DgeneratePom=true -Dpackaging=jar -DrepositoryId=server -Durl=dav:http://server:7777/maven2/sandbox -Dfile=GWT-Stuff.jar

I expect it to generate the pom and the checksums.

I got this working in 2.0.4 by adding a bunch of dav related files to maven-2.0.4\lib

Thanks,

Calin


Jason van Zyl added a comment - 27/Jun/07 04:23 PM
Right ... this is a known problem and you must load webdav as an extension or you must have had the dav libraries in your classpath, or Maven home for this to work. We are aware of this problem. When webdav is listed as an extension, which is the only way it works, then you can deploy fine. So this problem is actually fixed, and in the future it might be a little more kind to a project like Maven not to post your issues to site like TSS telling the world the issue hasn't been fixed when, in fact, is was. You have a different problem.

We will make the deployment plugin smarter in that it should parse user supplied URLs for Wagon extensions and load them. But this is not a an issue with plexus-utils not being present. I deploy everyday using WebDAV but it doesn have to be configured in the POM to load the extension into the right classloader.


Calin Medianu added a comment - 27/Jun/07 06:19 PM
Hi,

Thanks again for looking into it. Indeed, in 2.0.7 this issue is fixed and another issue has surfaced. In 2.0.6 is is NOT fixed. I said on TSS that this bug was not fixed in 2.0.6, which is true.

My comment on TSS was unkind and I'm sorry for that. The reason was to draw attention to the comment from Brill Pappin - [07/May/07 12:04 PM ] which was ignored for 2 months as well as the frustration from having to support a co-worker that decided to upgrade from 2.0.4 to 2.0.6 and DAV stopped working for her. in 2.0.4 dav is working from the command line with the extra jars in maven/lib, in 2.0.6 it cannot find the org/codehaus/plexus/util/StringUtils

I am actually a promoter of maven2 in my organization...

Thanks,

Calin


Jason van Zyl added a comment - 27/Jun/07 06:48 PM
We appreciate that, and I know people get frustrated but we're just like every other development shop that has problems ... ours is just spread out all over the world and we have very few dedicated resources. Also, that a comment isn't made in JIRA doesn't mean we're not looking at something. We could probably comment better, or mark issues as in progress but I looked at the issue pretty soon after it was report though it did take me a few weeks to getting around to fixing it.