Hi,

ok, more detail. Our application is in the end defined by mainly three war
modules. These contain all the jars that we build ourselves (modules in the
reactor) plus all dependencies from outside (irrelevant for what I want to
do). We also have a patch building process that does not build the complete
tree of all modules, but a defined subset. We still use the mentioned war
modules as collection points to assemble everything that was build into
what I will now call the patched war modules.

Now, we have a monitoring tool for our running application that is able to
tell apart which jar files that are in the classpath are patched and which
are not (simple property in the MANIFEST). What we would like to do is
check, if a complete patch delivery (consisting of all the jars that have
been patched) is installed correctly. In order to do that automatically,
while building the patches, I need to know all the modules that have been
patched. This in itself is ${reactorProjects) minus some logistical modules
in the reactor needed for the building process, but since these are known
they can be easily filtered out.

My issue right now is that this monitoring needs to know the amount of
patches per webmodule, not all of them. Let's say library-a is only used by
webmodule-1 and not webmodule-2. If I would use the complete set of patched
libraries, the tool would always show a failed installation for
webmodule-2, because it checks for library-a to be there, but it doesn't
belong there.

So, this is why I want to traverse the dependency graph for webmodule-1 and
-2 and check for each module in the reactor in which webmodules these are
included, while building the complete set of patches.

I will take a look into Project.#referencedProjects and also
session.#projectDependencyGraph. I think those sound like good starting
points.

Kind regards,

Christian


Am Fr., 24. Apr. 2020 um 15:09 Uhr schrieb Karl Heinz Marbaise <
khmarba...@gmx.de>:

> Hi,
>
> On 24.04.20 14:47, Christian Domsch wrote:
> > Hi,
> >
> > I would like to be able to get access to the reactor module tree. I have
> a
> > specific plugin that is executed for each reactor module and it needs to
> > check, if for a predefined set of modules in the reactor (in our case war
> > archives that contain a subset of all modules) see if the current module
> is
> > actually contained in that war (directly or via transitive dependencies).
>
> Can you explain more in detail what the use case is? If an artifact is
> part of a war? Why would like to check that? Can be seen in the war module?
>
> >
> > What I tried so far, but isn't working, is using the aether dependency
> > resolution mechanism. The reason why it isn't working is fairly obvious:
> > checking the transitive dependencies of these war modules, aether tries
> to
> > download all artifacts first and fails because they haven't been build by
> > the reactor, yet, and thus are unknown. This makes a lot of sense, but
> also
> > means this way won't help me.
> >
> > Now, the reactor itself has to be able to calculate those dependencies,
> as
> > it will calculate a certain order of building the modules, depending on
> how
> > those modules depend on each other. This (what I will call) reactor
> module
> > tree is exactly the information I need.
>
> The reactor is the part which contains the parents/modules and order of
> building the modules...this can be accessed via:
>
> @Parameter(defaultValue = "${session}", required = true, readonly = true)
> MavenSession session;
>
> By using the above session you could:
>   * session.getProjectDependencyGraph().getSortedProjects();
>
> The sortedProjects is exactly the order of the reactor ..
>
>
> If you like to know the dependencies you have to go via dependency
> resolution in your plugin:
>
> Something like:
>
> @Mojo(name = "xxx", defaultPhase = LifecyclePhase.PRE_INTEGRATION_TEST,
>      requiresDependencyResolution = ResolutionScope.RUNTIME, threadSafe
> = true)
>
> The important part is:
> requiresDependencyResolution = ResolutionScope.RUNTIME
>
> which you now gives you the option to access the dependencies:
>
> project.getArtifacts();
>
> where mvnProject:
>
>    @Parameter(defaultValue = "${project}", required = true, readonly =
> true)
>    private MavenProject project;
>
> Kind regards
> Karl Heinz Marbaise
>
> >
> > Is there a way to access this information from a plugin?
> ${reactorProjects}
> > does not tell me that. Or am I missing sth very obvious?
> >
> > Thx,
> >
> > Christian
> >
>
>
>

Reply via email to