Skip to content

NPE from Assembly plugin when POM packaging is used #1146

Closed
@sadovnikov

Description

@sadovnikov

Description

We use d-m-p with assembly file and everything is working great if default JAR Maven packaging is used. However this Maven module is meant for building docker image only, it does not contain any code. Attempts to use <packaging>pom</packaging> to avoid warnings about missing sources result in NPE thrown from Assembly plugin (exception trace is below).

The exception is thrown from code of Assembly plugin, but it can be used directly in modules with POM packaging - tested with version 3.1.0

Info

  • d-m-p version : 0.28.0
  • Maven version (mvn -v) : 3.5.2

Exception trace

Caused by: org.apache.maven.plugin.PluginExecutionException: Execution docker-build of goal io.fabric8:docker-maven-plugin:0.28.0:build failed.
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:145)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:208)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:309)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:194)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:107)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:955)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:290)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:194)
    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:498)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)
Caused by: java.lang.NullPointerException
    at org.apache.maven.plugins.assembly.archive.archiver.AssemblyProxyArchiver$DefaultFileInfo.isFile (AssemblyProxyArchiver.java:1025)
    at org.apache.maven.plugins.assembly.filter.ComponentsXmlArchiverFileFilter.isSelected (ComponentsXmlArchiverFileFilter.java:179)
    at org.apache.maven.plugins.assembly.archive.archiver.AssemblyProxyArchiver.acceptFile (AssemblyProxyArchiver.java:794)
    at org.apache.maven.plugins.assembly.archive.archiver.AssemblyProxyArchiver.addFile (AssemblyProxyArchiver.java:418)
    at org.apache.maven.plugins.assembly.archive.task.AddArtifactTask.asFile (AddArtifactTask.java:175)
    at org.apache.maven.plugins.assembly.archive.task.AddArtifactTask.execute (AddArtifactTask.java:132)
    at org.apache.maven.plugins.assembly.archive.task.AddDependencySetsTask.addNormalArtifact (AddDependencySetsTask.java:263)
    at org.apache.maven.plugins.assembly.archive.task.AddDependencySetsTask.addDependencySet (AddDependencySetsTask.java:175)
    at org.apache.maven.plugins.assembly.archive.task.AddDependencySetsTask.execute (AddDependencySetsTask.java:120)
    at org.apache.maven.plugins.assembly.archive.phase.DependencySetAssemblyPhase.execute (DependencySetAssemblyPhase.java:104)
    at org.apache.maven.plugins.assembly.archive.DefaultAssemblyArchiver.createArchive (DefaultAssemblyArchiver.java:181)
    at io.fabric8.maven.docker.assembly.DockerAssemblyManager.createAssemblyArchive (DockerAssemblyManager.java:466)
    at io.fabric8.maven.docker.assembly.DockerAssemblyManager.createDockerTarArchive (DockerAssemblyManager.java:115)
    at io.fabric8.maven.docker.service.ArchiveService.createArchive (ArchiveService.java:123)
    at io.fabric8.maven.docker.service.ArchiveService.createArchive (ArchiveService.java:118)
    at io.fabric8.maven.docker.service.BuildService.buildImage (BuildService.java:113)
    at io.fabric8.maven.docker.service.BuildService.buildImage (BuildService.java:61)
    at io.fabric8.maven.docker.BuildMojo.buildAndTag (BuildMojo.java:73)
    at io.fabric8.maven.docker.BuildMojo.processImageConfig (BuildMojo.java:104)
    at io.fabric8.maven.docker.BuildMojo.executeInternal (BuildMojo.java:60)
    at io.fabric8.maven.docker.AbstractDockerMojo.execute (AbstractDockerMojo.java:225)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:134)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:208)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:309)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:194)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:107)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:955)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:290)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:194)
    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:498)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)
  • If it's a bug, how to reproduce :

pom.xml, removal of <packaging>pom</packaging> line helps to avoid NPE, but adds warnings from maven-jar-plugin

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>xxxxx.xxxx.xxxx</groupId>
    <artifactId>docker-sample</artifactId>
    <packaging>pom</packaging>

    <name>Docker Image Sample</name>
    <description>Hello-world application to run in docker container</description>

    <properties>
        <result.service.jar>myservice.jar</result.service.jar>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>io.fabric8</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.28.0</version>
                <executions>
                    <execution>
                        <id>docker-build</id>
                        <!-- by default docker build happens at install phase -->
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>default</id>
                        <goals>
                            <goal>push</goal>
                            <goal>start</goal>
                            <!-- always use stop because it also removes exited container -->
                            <goal>stop</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <images>
                        <image>
                            <name>${docker.image.prefix}/${project.artifactId}:${project.version}</name>
                            <build>
                                <!-- see documentation on http://dmp.fabric8.io/#docker:build -->
                                <dockerFileDir>${project.basedir}/src/main/docker</dockerFileDir>
                                <assembly>
                                    <!-- assembly-like plugin prepares all files in "maven" folder next to filtered "Dockerfile" -->
                                    <descriptor>${project.basedir}/src/main/docker/docker-assembly.xml</descriptor>
                                </assembly>
                            </build>
                            <run>
                                <wait>
                                    <exit>0</exit>
                                    <!-- give a minute to complete the test -->
                                    <time>5000</time>
                                </wait>
                                <log>
                                    <prefix>%c&gt; </prefix>
                                    <color>cyan</color>
                                </log>
                            </run>
                        </image>
                    </images>
                </configuration>
            </plugin>

        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>xxxxx.xxxx.xxxx</groupId>
            <artifactId>docker-playground-java-app</artifactId>
            <version>0.0.27-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

referenced in pom.xml docker-assembly.xml

<?xml version="1.0" encoding="UTF-8"?>
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">

    <baseDirectory>.</baseDirectory>

    <dependencySets>
        <dependencySet>
            <includes>
                <include>*:docker-playground-java-app</include>
            </includes>
            <outputFileNameMapping>${result.service.jar}</outputFileNameMapping>
            <unpack>false</unpack>
        </dependencySet>
    </dependencySets>

</assembly>

Activity

fidget83

fidget83 commented on May 15, 2019

@fidget83

I have the same issue with d-m-p 0.30.0. Looks like it's related to https://issues.apache.org/jira/browse/MENFORCER-308 - I have the issue after add maven-enforce-plugin to my root pom.

daniel-huss

daniel-huss commented on Oct 16, 2019

@daniel-huss

I was able to fix this break the build in a different way (see below) by updating the assembly plugin dependency to 3.1.1:

<plugin>
    <groupId>io.fabric8</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.31.0</version>
    <!-- ... -->
    <dependencies>
        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.1.1</version>
        </dependency>
    </dependencies>
</plugin>
rohanKanojia

rohanKanojia commented on Oct 16, 2019

@rohanKanojia
Member

@daniel-huss : Thanks for your feedback. Could you please raise a PR to update this dependency if you have time?

daniel-huss

daniel-huss commented on Oct 16, 2019

@daniel-huss

Unfortunately, using version 3.1.1 breaks my build in a different way. The assembly plugin now reports an empty set of dependencies, which breaks <dependencySet>:

[DEBUG] Dependencies for project: my-group:my-docker-image:pom:0.4.0-SNAPSHOT are:

(just an empty line)

Removing the plugin <dependencies> section reverts the situation to

[DEBUG] Dependencies for project: my-group:my-docker-image:pom:0.4.0-SNAPSHOT are:
my-group:my-app-standalone:jar:0.4.0-SNAPSHOT:provided
[DEBUG] Resolving project dependencies transitively.
...

However, disabling our maven-enforcer-plugin execution has fixed the issue completely for me:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <executions>
                    <execution>
                        <id>enforce-maven-3</id><!-- Defined in our base POM  -->
                        <phase>none</phase>
                    </execution>
                </executions>
                <!-- Note that using <configuration><skip>true  is not enough! -->
            </plugin>
sdehors-ibm

sdehors-ibm commented on Aug 10, 2022

@sdehors-ibm

Experienced the same issue with docker-maven-plugin 0.40.2, fixed it by forcing the assembly plugin version to 3.1.1.

rhuss

rhuss commented on Aug 11, 2022

@rhuss
Collaborator

@rohanKanojia do you think we would be able to update the assembly plugin without breaking something ?

self-assigned this
on Aug 11, 2022
removed their assignment
on Oct 14, 2022
slawekjaranowski

slawekjaranowski commented on Oct 17, 2022

@slawekjaranowski
Contributor

Bug is in docker-m-p - fixed in mentioned PR

added a commit that references this issue on Oct 20, 2022
be517e1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

    Development

    Participants

    @rhuss@slawekjaranowski@sadovnikov@rohanKanojia@fidget83

    Issue actions

      NPE from Assembly plugin when POM packaging is used · Issue #1146 · fabric8io/docker-maven-plugin