In the first snip, I need to get a list of all dependencies for a project in a tree so that I can add some dependencies to a classpath to execute a child java process. The second snip is used to resolve artifacts which are not configured directly as dependencies, but defined similar to how the dependency plugin lists <artifactItems>.

I have a few different plugins that need this and I want to put all of the code to do it into a helper component so it is easier to reuse and maintain. I also need to be able to get all of the transitive deps for an <artifactItem> too. For example, in the Geronimo car plugin, there is a goal which packages a car, and in that jar we need to specify a classpath. The classpath needs to contain a sub-set of the dependencies of the module which is building the car... and since in m2 there is no mechanism to annotate dependency elements with custom data to allow my plugin to use that to determine which to include, I have to do something similar to the dependency plugin and define nested artifactItem elements in the plugins config. Right now it lists all of the deps, but I would like to list a few deps and pick up the rest as transitive deps of those few artifacts.

So I was building a DependencyHelper plexus component, which defines:

    DependencyTree getDependencies(MavenProject)

    DependencyTree getDependencies(Artifact)

Then mojo's that need this, can use use the helper component and not need all of the other bits that are needed to make this work. So far, at least for getDependencies(MavenProject) this works, except that I need to pass in the ${localRepository} reference from the mojo... which means the mojos that use it need to define fields for the helper and the ${localRepository}. I'd like to avoid needing those mojos to know anything about the ${localRepository}.

I've got some similar problems with other components, where I'm trying to put commonly used code into helper objects or components to share them between my mojos but its a bit of a pain right now as helper objects don't get @parameter bits processed and that some of the needed objects are not available (AFAIK) to be used in @component references.

I'm also a little confused as there seem to be several different ways (that have been suggested to be by folks in #maven) to get a tree of a specific projects deps transitively or the same for a specific artifact.

But, I was able to get something to work with the collector.

Anyways, as we start making more and more plugins to help with the Geronimo build, its is becoming more and more important to put the shared helper code into components to allow them to be easily shared between plugin modules and easier to maintain.

--jason


On Oct 9, 2006, at 6:25 AM, Jason van Zyl wrote:

What is it that you're actually trying to do?

Jason.

On 9 Oct 06, at 3:03 AM 9 Oct 06, Jason Dillon wrote:

No I did not send that message 5 times.

I need the localRepository for calls like:

<snip>
artifactCollector.collect(
                project.getDependencyArtifacts(),
                project.getArtifact(),
                managedVersions,
                getArtifactRepository(), // ${localRepository}
                project.getRemoteArtifactRepositories(),
                artifactMetadataSource,
                null,
                Collections.singletonList(listener));
</snip>

or:

<snip>
getArtifactResolver().resolve(artifact, getProject ().getRemoteArtifactRepositories(), getArtifactRepository());
</snip>

--jason


On Oct 9, 2006, at 12:38 AM, Kenney Westerhof wrote:


Is it my mail client or did you really send this message 5 times?

The settings object (which contains the local repo) is not a component,
so you can't inject that.
You could re-parse the settings.xml yourself, but that's not a nice
solution.

I think you're stuck with passing the settings or local repo to the component
on method calls, or call a setter.

Btw, why do you need the local repository? If it's for artifact resolution you could also a component from maven-artifact(-manager).

-- Kenney

Jason Dillon wrote:
Anyone know how to get the "${localRepository}" ArtifactRepository from a Plexus component... not a mojo. More specifically I have created a new component, which I inject into my mojo (with @component and a <component> role defined in plexus/components.xml) and I want that injected component to have access to "${localRepository}", but I don't want to define that in my mojo and pass it in to the component each time it needs it.
Anyone know how to do this?
Thanks,
--jason
------------------------------------------------------------------- --
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