Hi mike

I believe that might be related to a wrong dependency and I seem to believe 
that I have seen this. You could post a dependency tree of your pluton and I 
will double check against my own pluton.

Andreas

Sent from my iPhone

On Oct 26, 2010, at 12:03 AM, Mike Lenner <[email protected]> wrote:

> Andreas -
> 
> Thanks - this works for me with one huge caveat (perhaps not
> experienced by you since you're using scala?).
> 
> When the DefaultMavenPluginManager is loaded, it's loaded as part of
> an org.apache.maven:maven-core specific classloader.  One of the
> classes loaded in the PlexusConfiguration.  When my plugin is loaded,
> it uses it's own classloader (as all plugins do I believe).  This
> class loader also gets PlexusConfiguration loaded because I'm
> referencing it via the getMojoConfiguration call.
> 
> What I end up with is the dreaded java.lang.LinkageError.  Not sure
> how to move forward.  Seems like PlexusConfiguration would have to be
> loaded into a parent classloader instead....
> 
> Caused by: java.lang.LinkageError: loader constraints violated when
> linking org/codehaus/plexus/configuration/PlexusConfiguration class
> 
> On Sat, Oct 23, 2010 at 7:49 AM, Andreas Gies <[email protected]> wrote:
>> Hi there
>> 
>> i *think* the key point was to call getMojoConfiguration on the
>> Mojodescriptor
>> I had resolved. In my case that gives me all the default configurations as I
>> would have
>> expected. I need only to set configs that differ from the default settings.
>> 
>> I am attaching the latest code for my "play" plugin again. It is in scala,
>> but you should get
>> the idea of using the API's.
>> 
>> Best regards
>> Andreas
>> 
>> 
>> 
>> Am 10/22/10 6:24 PM, schrieb Mike Lenner:
>>> 
>>> Thanks very much for this thread.  I'm trying to write a plugin with
>>> maven 3.0 (simply in Java) that executes another plugin as well - this
>>> has been very helpful.
>>> 
>>> Just to clear up what you've discovered, were you able to use
>>> mojoDescriptor.getMojoConfiguration to build the default configuration
>>> for the called plugin or do you still need to manually set all the
>>> default configs yourself?  Right now I'm only able to get it working
>>> doing the later.
>>> 
>>> Thanks,
>>> Mike
>>> 
>>> On Thu, Oct 21, 2010 at 2:52 AM, Andreas Gies<[email protected]>
>>>  wrote:
>>>> 
>>>> Hi all,
>>>> 
>>>> just to finish up the thread, I have fixed this by adding a
>>>> @RequiresDependencyResolution("test")
>>>> to the mojo calling the dependency plugin.
>>>> 
>>>> Thanks and best regards
>>>> Andreas
>>>> 
>>>> Am 10/21/10 3:10 AM, schrieb Andreas Gies:
>>>>> 
>>>>>  Hello,
>>>>> 
>>>>> a last update for today. I have compared a debug session of
>>>>> 
>>>>> mvn dependency:resolve
>>>>> 
>>>>> with what happens in my code. It seems, that when calling the plugin
>>>>> from
>>>>> the command line, at the end of the day
>>>>> a class named
>>>>> 
>>>>> org.apache.maven.lifecycle.internal.MojoExecutor
>>>>> 
>>>>> kind of controlls he execution and also takes initiates the desired
>>>>> dependency resolution before the plugin code is called.
>>>>> Therefore the dependency plugin finds the dependencies and all is good.
>>>>> 
>>>>> However, when i invoke
>>>>> 
>>>>> BuildPluginManager.executeMojo
>>>>> 
>>>>> the dependency resolution does not happen and the dependency plugin
>>>>> doesnt
>>>>> find them.
>>>>> 
>>>>> 
>>>>> I have now the options to use a non-public API and reuse the
>>>>> MojoExecutor
>>>>> code or kinfd of Mimick that behavior.
>>>>> I kind of have the feeling that I am missing something very obvious in
>>>>> the
>>>>> API. A pointer to a correct call triggering
>>>>> dependency resolution would be great. Perhaps I have selected the wrong
>>>>> entrypoint into the API ?
>>>>> 
>>>>> Thanks and best regards
>>>>> Andreas
>>>>> 
>>>>> Am 10/21/10 2:12 AM, schrieb Andreas Gies:
>>>>>> 
>>>>>>  Hello,
>>>>>> 
>>>>>> another update on this. From studying the source code I was under the
>>>>>> impression that mojoDescriptor.getConfiguration
>>>>>> would give me the default configuration, but it is
>>>>>> mojoDescriptor.getMojoConfiguration.
>>>>>> 
>>>>>> A debug session has shown, that the dependency plugin actually
>>>>>> executes,
>>>>>> but somehow doesn't recognize the dependencies
>>>>>> of the project.
>>>>>> 
>>>>>> Best regards
>>>>>> Andreas
>>>>>> 
>>>>>> Am 10/20/10 8:28 PM, schrieb Andreas Gies:
>>>>>>> 
>>>>>>>  Hello,
>>>>>>> 
>>>>>>> I forgot to mention that the output from the scala plugin is embedded
>>>>>>> in
>>>>>>> the build.log produced by the mavan invoker plugin.
>>>>>>> 
>>>>>>> Best regards
>>>>>>> Andreas
>>>>>>> 
>>>>>>> Am 10/20/10 8:22 PM, schrieb Andreas Gies:
>>>>>>>> 
>>>>>>>>  Hello,
>>>>>>>> 
>>>>>>>> I am still banging my head on this problem, though I got a bit
>>>>>>>> farther.
>>>>>>>> I found a link via Google pointing to the maven site plugin and there
>>>>>>>> to the
>>>>>>>> DefaultMavenReportExecutor. I have tried to mimick the behavior in my
>>>>>>>> special
>>>>>>>> case and for testing I want to invoke the maven dependency plugin,
>>>>>>>> namely
>>>>>>>> the unpack dependencies goal.
>>>>>>>> 
>>>>>>>> It seems to work if I provide all the missing paramters (like project
>>>>>>>> etc.) into
>>>>>>>> the configuration as expressions as follows
>>>>>>>> 
>>>>>>>>    val config : Xpp3Dom = Xpp3DomUtils.mergeXpp3Dom(
>>>>>>>>       buildConfiguration(
>>>>>>>>         Map(
>>>>>>>>          "outputDirectory" ->  "test",
>>>>>>>>          "project" ->  "${project}",
>>>>>>>>          "local" ->  "${localRepository}",
>>>>>>>>          "reactorProjects" ->  "${reactorProjects}" ,
>>>>>>>>          "remoteRepos" ->  "${project.remoteArtifactRepositories}"
>>>>>>>>         )
>>>>>>>>       ),
>>>>>>>>      convert(md)
>>>>>>>>    )
>>>>>>>> 
>>>>>>>> That approach doesn't give me any Exceptions. I would have expected
>>>>>>>> that all parameters except the non-default output directory
>>>>>>>> would be resolved as the dependency plugin gives default expressions
>>>>>>>> for them.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> However, this approach removes the parameter exceptions from before,
>>>>>>>> but calling it doesn't unpack the dependencies (nothing happens
>>>>>>>> really).
>>>>>>>> 
>>>>>>>> I have tried to use the
>>>>>>>> 
>>>>>>>>  LifecycleExecutor.executeForkedExecutions
>>>>>>>>  BuildPluginManager.executeMojo
>>>>>>>> 
>>>>>>>> and even tried to call execute on the configured Mojo (which I
>>>>>>>> probably
>>>>>>>> shouldn't do ?)
>>>>>>>> 
>>>>>>>> I have attached a sample build output and also the code of my scala
>>>>>>>> based mojo.
>>>>>>>> 
>>>>>>>> Apart from studying the source code of the API and some sample
>>>>>>>> plugins,
>>>>>>>> is there documentation how the
>>>>>>>> new plugin API is supposed to work ?
>>>>>>>> 
>>>>>>>> Am I trying to do something out of the ordinary here ? (I know I
>>>>>>>> could
>>>>>>>> configure the dependency plugin in the
>>>>>>>> pom but as this is *such* an essential step in the final mojo I don't
>>>>>>>> want to give the user the option of leaving it
>>>>>>>> out ... and I wanted to learn some more maven internals).
>>>>>>>> 
>>>>>>>> Has anyone an example of initializing and calling a mojo from within
>>>>>>>> a
>>>>>>>> mojo using the new API ? - Java is fine as
>>>>>>>> well, I can adopt it to scala as a learning exercise.
>>>>>>>> 
>>>>>>>> I think I might be missing something in terms of hooking up or
>>>>>>>> registering the project with the dependency plugin
>>>>>>>> though the build output indicates that the project is referenced
>>>>>>>> correctly.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> Any hints would be really appreciated; if I am hitting the wrong
>>>>>>>> list,
>>>>>>>> please let me know.
>>>>>>>> 
>>>>>>>> Thanks in advance
>>>>>>>> Andreas
>>>>>>>> 
>>>>>>>> Am 10/13/10 9:27 AM, schrieb Andreas Gies:
>>>>>>>>> 
>>>>>>>>>  Hello Maveners ,
>>>>>>>>> 
>>>>>>>>> mainly for self learning purposes I am trying to build some plugins
>>>>>>>>> for Maven 3 using the Scala language.
>>>>>>>>> One of the things I had going before (Maven 2&  Java based) is to
>>>>>>>>> invoke another plugin programmatically.
>>>>>>>>> 
>>>>>>>>> Now I am trying to invoke the dependency plugin, namely the
>>>>>>>>> unpack-dependencies goal and am running
>>>>>>>>> into a rather cryptic error message:
>>>>>>>>> 
>>>>>>>>> [ERROR] Failed to execute goal
>>>>>>>>> com.progress.maven.plugins:plugin-sandbox:8.0-SNAPSHOT:echo
>>>>>>>>> (default-cli) on
>>>>>>>>> project test-plugin: The parameters 'proje
>>>>>>>>> ct', 'local', 'remoteRepos', 'reactorProjects' for goal
>>>>>>>>> 
>>>>>>>>> org.apache.maven.plugins:maven-dependency-plugin:2.1:unpack-dependencies
>>>>>>>>>  are
>>>>>>>>> missing or invali
>>>>>>>>> d ->  [Help 1]
>>>>>>>>> 
>>>>>>>>> org.apache.maven.lifecycle.LifecycleExecutionException: Failed to
>>>>>>>>> execute goal
>>>>>>>>> com.progress.maven.plugins:plugin-sandbox:8.0-SNAPSHOT:echo
>>>>>>>>> (default-cl
>>>>>>>>> i) on project test-plugin: The parameters 'project', 'local',
>>>>>>>>> 'remoteRepos', 'reactorProjects' for goal
>>>>>>>>> 
>>>>>>>>> org.apache.maven.plugins:maven-dependency-plugin:2.1:unpack-dependencies
>>>>>>>>>  are
>>>>>>>>> missing or invalid
>>>>>>>>>        at
>>>>>>>>> 
>>>>>>>>> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:157)
>>>>>>>>>        at
>>>>>>>>> 
>>>>>>>>> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:88)
>>>>>>>>>        at
>>>>>>>>> 
>>>>>>>>> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:80)
>>>>>>>>>        at
>>>>>>>>> 
>>>>>>>>> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:87)
>>>>>>>>>        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:315)
>>>>>>>>>        at
>>>>>>>>> org.apache.maven.DefaultMaven.execute(DefaultMaven.java:152)
>>>>>>>>>        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:445)
>>>>>>>>>        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:168)
>>>>>>>>>        at org.apache.maven.cli.MavenCli.main(MavenCli.java:132)
>>>>>>>>>        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.PluginParameterException: The
>>>>>>>>> parameters 'project', 'local', 'remoteRepos', 'reactorProjects' for
>>>>>>>>> goal
>>>>>>>>> 
>>>>>>>>> org.apache.maven.plugins:maven-dependency-plugin:2.1:unpack-dependencies
>>>>>>>>>  are
>>>>>>>>> missing or invalid
>>>>>>>>>        at
>>>>>>>>> 
>>>>>>>>> org.apache.maven.plugin.internal.DefaultMavenPluginManager.populatePluginFields(DefaultMavenPluginManager.java:514)
>>>>>>>>>        at
>>>>>>>>> 
>>>>>>>>> org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo(DefaultMavenPluginManager.java:467)
>>>>>>>>>        at
>>>>>>>>> 
>>>>>>>>> org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:96)
>>>>>>>>>        at de.woq.maven.plugins.TestMojo.execute(TestMojo.scala:109)
>>>>>>>>>        at
>>>>>>>>> 
>>>>>>>>> org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:107)
>>>>>>>>>        at
>>>>>>>>> 
>>>>>>>>> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
>>>>>>>>>        ... 19 more
>>>>>>>>> 
>>>>>>>>> It seems that the current project is not passed correctly to the
>>>>>>>>> plugin. I have noticed that the API for invoking plugins has
>>>>>>>>> slightly
>>>>>>>>> changed, but was unable to get more information.
>>>>>>>>> Any hints where to dig deeper would be greatly appreciated.
>>>>>>>>> 
>>>>>>>>> For completeness here is the code of my plugin so far .... (As I
>>>>>>>>> said
>>>>>>>>> its a learning exercise :))
>>>>>>>>> 
>>>>>>>>> /*
>>>>>>>>>  * Copyright (C) 2010, Way of Quality
>>>>>>>>>  * All rights reserved.
>>>>>>>>>  *
>>>>>>>>>  * Licensed under the Apache License, Version 2.0 (the "License");
>>>>>>>>>  * you may not use this file except in compliance with the License.
>>>>>>>>>  * You may obtain a copy of the License at
>>>>>>>>>  *
>>>>>>>>>  * http://www.apache.org/licenses/LICENSE-2.0
>>>>>>>>>  *
>>>>>>>>>  * Unless required by applicable law or agreed to in writing,
>>>>>>>>> software
>>>>>>>>>  * distributed under the License is distributed on an "AS IS" BASIS,
>>>>>>>>>  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>>>>>> implied.
>>>>>>>>>  * See the License for the specific language governing permissions
>>>>>>>>> and
>>>>>>>>>  * limitations under the License.
>>>>>>>>>  */
>>>>>>>>> 
>>>>>>>>> package de.woq.maven.plugins
>>>>>>>>> 
>>>>>>>>> import org.apache.maven.plugin._
>>>>>>>>> import descriptor.MojoDescriptor
>>>>>>>>> import org.scala_tools.maven.mojo.annotations._
>>>>>>>>> import org.apache.maven.project.MavenProject
>>>>>>>>> import org.apache.maven.execution.MavenSession
>>>>>>>>> import org.apache.maven.model.Plugin
>>>>>>>>> 
>>>>>>>>> import scala.collection.JavaConversions._
>>>>>>>>> import org.codehaus.plexus.component.annotations.Requirement
>>>>>>>>> import org.codehaus.plexus.util.xml.Xpp3Dom
>>>>>>>>> 
>>>>>>>>> @goal("echo")
>>>>>>>>> @phase("process-sources")
>>>>>>>>> @requiresProject
>>>>>>>>> class TestMojo extends AbstractMojo {
>>>>>>>>> 
>>>>>>>>>  @readOnly @parameter @expression("${project}")
>>>>>>>>>  var project : MavenProject = _
>>>>>>>>> 
>>>>>>>>>  @readOnly @parameter @expression("${session}")
>>>>>>>>>  var session : MavenSession = _
>>>>>>>>> 
>>>>>>>>>  @Requirement
>>>>>>>>>  var pluginManager: BuildPluginManager = _
>>>>>>>>> 
>>>>>>>>>  private def getBuildPlugin(groupId: String, artifactId: String,
>>>>>>>>> version: Option[String]) = {
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>>  
>>>>>>>>> List.fromIterator(project.getBuildPlugins.iterator).asInstanceOf[List[Plugin]]
>>>>>>>>>      .filter(
>>>>>>>>>         p =>  (p.getGroupId.equals(groupId))&&
>>>>>>>>> (p.getArtifactId.equals(artifactId)&&  (version == None ||
>>>>>>>>> p.getVersion.equals(version)))
>>>>>>>>>      )
>>>>>>>>>  }
>>>>>>>>> 
>>>>>>>>>  def resolvePluginManager = {
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>>  
>>>>>>>>> session.getContainer.lookup("org.apache.maven.plugin.BuildPluginManager").asInstanceOf[BuildPluginManager]
>>>>>>>>>  }
>>>>>>>>> 
>>>>>>>>>  def buildConfiguration(params: Map[String, String]): Xpp3Dom = {
>>>>>>>>>    var config = new Xpp3Dom("configuration")
>>>>>>>>> 
>>>>>>>>>    for{
>>>>>>>>>      key<- params.keys
>>>>>>>>>      value = params.get(key)
>>>>>>>>>    } {
>>>>>>>>>      var child = new Xpp3Dom(key)
>>>>>>>>>      child.setValue(
>>>>>>>>>        params.get(key) match {
>>>>>>>>>          case Some(v) =>  v
>>>>>>>>>          case None =>  ""
>>>>>>>>>        }
>>>>>>>>>      )
>>>>>>>>>      config.addChild(child)
>>>>>>>>>    }
>>>>>>>>> 
>>>>>>>>>    println(config.toUnescapedString)
>>>>>>>>>    config
>>>>>>>>>  }
>>>>>>>>> 
>>>>>>>>>  override def execute = {
>>>>>>>>> 
>>>>>>>>>    val plugins = getBuildPlugin("org.apache.maven.plugins",
>>>>>>>>> "maven-dependency-plugin", None)
>>>>>>>>>    assert(plugins.length == 1, "Found " + plugins.length + " plugins
>>>>>>>>> for dependdency resolution, expected 1")
>>>>>>>>> 
>>>>>>>>>    val dep: Plugin = plugins.head
>>>>>>>>> 
>>>>>>>>>    getLog.info("==============================")
>>>>>>>>> 
>>>>>>>>>    // needed as component injection seems to be broken in scala
>>>>>>>>> plugins ...
>>>>>>>>>    pluginManager = resolvePluginManager
>>>>>>>>> 
>>>>>>>>>    assert(project != null)
>>>>>>>>>    assert(session != null)
>>>>>>>>>    assert(pluginManager != null)
>>>>>>>>> 
>>>>>>>>>    var config : Xpp3Dom = buildConfiguration(Map("outputDirectory"
>>>>>>>>> ->
>>>>>>>>> "test"))
>>>>>>>>> 
>>>>>>>>>    var md : MojoDescriptor = pluginManager.getMojoDescriptor(
>>>>>>>>>      dep, "unpack-dependencies",
>>>>>>>>> project.getRemotePluginRepositories,
>>>>>>>>> session.getRepositorySession
>>>>>>>>>    )
>>>>>>>>> 
>>>>>>>>>    var execution : MojoExecution = new MojoExecution(md, config)
>>>>>>>>> 
>>>>>>>>>    assert(md != null)
>>>>>>>>> 
>>>>>>>>>    pluginManager.executeMojo(session, execution)    //<==== fails
>>>>>>>>> here ....
>>>>>>>>> 
>>>>>>>>>    getLog.info("==============================")
>>>>>>>>>  }
>>>>>>>>> }
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> Thanks and best regards
>>>>>>>>> Andreas
>>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> ---------------------------------------------------------------------
>>>>>>>> To unsubscribe, e-mail: [email protected]
>>>>>>>> For additional commands, e-mail: [email protected]
>>>>>>> 
>>>>>> 
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: [email protected]
>>>>>> For additional commands, e-mail: [email protected]
>>>>>> 
>>>>>> 
>>>>> 
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: [email protected]
>>>>> For additional commands, e-mail: [email protected]
>>>>> 
>>>>> 
>>>> 
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [email protected]
>>>> For additional commands, e-mail: [email protected]
>>>> 
>>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [email protected]
>>> For additional commands, e-mail: [email protected]
>>> 
>>> 
>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to