Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[aether-users] Help about Maven internal management of plugins instances

Hi,

I recently discovered an issue with my plugin (ant-assembly-maven-plugin) based on Aether and I'm having hard time to analyze the cause.
The issue raised using maven-deploy-plugin's deployAtEnd option but it likely has nothing to do with that plugin and revealed a more general issue in my implementation.

Here it is: the "deployAtEnd" option doesn't work after building a module involving my plugin because a new "Class realm plugin" is then created and its static fields are reset (in that case, the org.apache.maven.plugin.deploy.DeployMojo.readyProjectsCounter field).

Code from maven-deploy-plugin (readyProjectsCounter restarted to zero will never equal to reactorProjects.size(), projectsReady will be always false):
    @Parameter( defaultValue = "${reactorProjects}", required = true, readonly = true )
    private List<MavenProject> reactorProjects;

    private static final AtomicInteger readyProjectsCounter = new AtomicInteger();

    org.apache.maven.plugin.deploy.DeployMojo.execute() {
        boolean projectsReady = readyProjectsCounter.incrementAndGet() == reactorProjects.size();

In the following sample case, the culprit ant-assembly-maven-plugin is called by the "nuxeo-distribution-resources" module (after that, no deployment will ever happen since the counter has been reset and will never reach the number of "reactorProjects"):
$ mvn clean deploy -Pqa -DskipTests -pl nuxeo-functional-tests,nuxeo-launcher,nuxeo-distribution-resources -nsu -X|grep maven-deploy-plugin

[DEBUG] Goal:          org.apache.maven.plugins:maven-deploy-plugin:2.8.1:deploy (default-deploy)
[INFO] --- maven-deploy-plugin:2.8.1:deploy (default-deploy) @ nuxeo-functional-tests ---
[DEBUG] org.apache.maven.plugins:maven-deploy-plugin:jar:2.8.1:
[DEBUG] Created new class realm plugin>org.apache.maven.plugins:maven-deploy-plugin:2.8.1
[DEBUG] Importing foreign packages into class realm plugin>org.apache.maven.plugins:maven-deploy-plugin:2.8.1
[DEBUG] Populating class realm plugin>org.apache.maven.plugins:maven-deploy-plugin:2.8.1
[DEBUG]   Included: org.apache.maven.plugins:maven-deploy-plugin:jar:2.8.1
[DEBUG] Configuring mojo org.apache.maven.plugins:maven-deploy-plugin:2.8.1:deploy from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-deploy-plugin:2.8.1, parent: sun.misc.Launcher$AppClassLoader@4821e115]
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-deploy-plugin:2.8.1:deploy' with basic configurator -->
[DEBUG] Goal:          org.apache.maven.plugins:maven-deploy-plugin:2.8.1:deploy (default-deploy)

[INFO] --- maven-deploy-plugin:2.8.1:deploy (default-deploy) @ nuxeo-launcher ---
[DEBUG] Configuring mojo org.apache.maven.plugins:maven-deploy-plugin:2.8.1:deploy from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-deploy-plugin:2.8.1, parent: sun.misc.Launcher$AppClassLoader@4821e115]
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-deploy-plugin:2.8.1:deploy' with basic configurator -->
[DEBUG] Goal:          org.apache.maven.plugins:maven-deploy-plugin:2.8.1:deploy (default-deploy)

[INFO] --- maven-deploy-plugin:2.8.1:deploy (default-deploy) @ nuxeo-distribution-resources ---
[DEBUG] org.apache.maven.plugins:maven-deploy-plugin:jar:2.8.1:
[DEBUG] Created new class realm plugin>org.apache.maven.plugins:maven-deploy-plugin:2.8.1--724569306
[DEBUG] Importing foreign packages into class realm plugin>org.apache.maven.plugins:maven-deploy-plugin:2.8.1--724569306
[DEBUG] Populating class realm plugin>org.apache.maven.plugins:maven-deploy-plugin:2.8.1--724569306
[DEBUG]   Included: org.apache.maven.plugins:maven-deploy-plugin:jar:2.8.1
[DEBUG] Configuring mojo org.apache.maven.plugins:maven-deploy-plugin:2.8.1:deploy from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-deploy-plugin:2.8.1--724569306, parent: sun.misc.Launcher$AppClassLoader@4821e115]
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-deploy-plugin:2.8.1:deploy' with basic configurator -->

Could someone explain or guess why/when a "new class realm plugin>org.apache.maven.plugins:maven-deploy-plugin" is created (in bold) instead of reusing the previous one?
What could cause that in my code?

The full log of above reproduction case: http://ubuntuone.com/0WeyQGBzaDacZWh97CwcvE
The ant-assembly-maven-plugin source code: https://github.com/nuxeo/ant-assembly-maven-plugin
Issue management: https://jira.nuxeo.com/browse/NXBT-739

Thanks,

--

Julien Carsique
DevOps Nuxeo, Paris, France


Back to the top