NPE for PosixFileAttributeView.readAttributes on windows (original) (raw)

While running a mvnd -Dquickly on https://github.com/quarkusio/quarkus, I encounter the following exception on windows.
This only happens in some specific modules, see reproduction steps.

I believe this is caused by a missing / incorrect null check

private void fixLastModifiedTimeZipEntries() throws IOException {
long timeMillis = getLastModifiedTime().toMillis();
Path destFile = getDestFile().toPath();
PosixFileAttributes posixFileAttributes = Files.getFileAttributeView(
destFile, PosixFileAttributeView.class, LinkOption.NOFOLLOW_LINKS)
.readAttributes();
FileAttribute<?>[] attributes;
if (posixFileAttributes != null) {

getFileAttributeView can return null if the PosixFileAttributeView is not available - which is most likely the case since I am using windows.

(introduced with #333)

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:3.5.0:jar (default-jar) on project quarkus-class-change-agent: Error assembling JAR: Cannot invoke "java.nio.file.attribute.PosixFileAttributeView.readAttributes()" because the return value of "java.nio.file.Files.getFileAttributeView(java.nio.file.Path, java.lang.Class, java.nio.file.LinkOption[])" is null -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:3.5.0:jar (default-jar) on project quarkus-class-change-agent: Error assembling JAR
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:333)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:919)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:285)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:207)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:568)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:255)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:201)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:361)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:314)
Caused by: org.apache.maven.plugin.MojoExecutionException: Error assembling JAR
    at org.apache.maven.plugins.jar.AbstractJarMojo.createArchive (AbstractJarMojo.java:338)
    at org.apache.maven.plugins.jar.AbstractJarMojo.execute (AbstractJarMojo.java:358)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:568)
    at com.gradle.maven.cache.extension.c.n.a (SourceFile:53)
    at com.gradle.maven.cache.extension.c.d.a (SourceFile:27)
    at com.gradle.maven.cache.extension.c.q.a (SourceFile:23)
    at com.gradle.maven.cache.extension.c.j.a (SourceFile:28)
    at com.gradle.maven.cache.extension.c.p.a (SourceFile:27)
    at com.gradle.maven.cache.extension.c.b.c (SourceFile:118)
    at com.gradle.maven.cache.extension.c.b.a (SourceFile:62)
    at com.gradle.maven.cache.extension.c.g.a (SourceFile:27)
    at com.gradle.maven.cache.extension.c.a.a (SourceFile:46)
    at com.gradle.maven.cache.extension.c.o.a (SourceFile:18)
    at com.gradle.maven.cache.extension.c.a.a (SourceFile:46)
    at com.gradle.maven.cache.extension.c.c.a (SourceFile:26)
    at com.gradle.maven.cache.extension.c.h$1.run (SourceFile:35)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute (SourceFile:29)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute (SourceFile:26)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute (SourceFile:66)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute (SourceFile:59)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.execute (SourceFile:166)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.execute (SourceFile:59)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.run (SourceFile:47)
    at com.gradle.maven.cache.extension.c.h.a (SourceFile:31)
    at com.gradle.maven.cache.extension.c.m.a (SourceFile:80)
    at com.gradle.maven.cache.extension.g.b.lambda$createProxy$0 (SourceFile:77)
    at jdk.proxy13.$Proxy85.execute (Unknown Source)
    at com.gradle.maven.scan.extension.internal.e.b.executeMojo (SourceFile:116)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:919)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:285)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:207)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:568)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:255)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:201)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:361)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:314)
Caused by: java.lang.NullPointerException: Cannot invoke "java.nio.file.attribute.PosixFileAttributeView.readAttributes()" because the return value of "java.nio.file.Files.getFileAttributeView(java.nio.file.Path, java.lang.Class, java.nio.file.LinkOption[])" is null                                                                                                                               
    at org.codehaus.plexus.archiver.jar.JarToolModularJarArchiver.fixLastModifiedTimeZipEntries (JarToolModularJarArchiver.java:158)
    at org.codehaus.plexus.archiver.jar.JarToolModularJarArchiver.postCreateArchive (JarToolModularJarArchiver.java:143)
    at org.codehaus.plexus.archiver.AbstractArchiver.createArchive (AbstractArchiver.java:920)
    at org.apache.maven.archiver.MavenArchiver.createArchive (MavenArchiver.java:603)
    at org.apache.maven.plugins.jar.AbstractJarMojo.createArchive (AbstractJarMojo.java:333)
    at org.apache.maven.plugins.jar.AbstractJarMojo.execute (AbstractJarMojo.java:358)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:568)
    at com.gradle.maven.cache.extension.c.n.a (SourceFile:53)
    at com.gradle.maven.cache.extension.c.d.a (SourceFile:27)
    at com.gradle.maven.cache.extension.c.q.a (SourceFile:23)
    at com.gradle.maven.cache.extension.c.j.a (SourceFile:28)
    at com.gradle.maven.cache.extension.c.p.a (SourceFile:27)
    at com.gradle.maven.cache.extension.c.b.c (SourceFile:118)
    at com.gradle.maven.cache.extension.c.b.a (SourceFile:62)
    at com.gradle.maven.cache.extension.c.g.a (SourceFile:27)
    at com.gradle.maven.cache.extension.c.a.a (SourceFile:46)
    at com.gradle.maven.cache.extension.c.o.a (SourceFile:18)
    at com.gradle.maven.cache.extension.c.a.a (SourceFile:46)
    at com.gradle.maven.cache.extension.c.c.a (SourceFile:26)
    at com.gradle.maven.cache.extension.c.h$1.run (SourceFile:35)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute (SourceFile:29)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute (SourceFile:26)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute (SourceFile:66)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute (SourceFile:59)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.execute (SourceFile:166)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.execute (SourceFile:59)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.run (SourceFile:47)
    at com.gradle.maven.cache.extension.c.h.a (SourceFile:31)
    at com.gradle.maven.cache.extension.c.m.a (SourceFile:80)
    at com.gradle.maven.cache.extension.g.b.lambda$createProxy$0 (SourceFile:77)
    at jdk.proxy13.$Proxy85.execute (Unknown Source)
    at com.gradle.maven.scan.extension.internal.e.b.executeMojo (SourceFile:116)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:919)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:285)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:207)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:568)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:255)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:201)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:361)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:314)
[ERROR] 
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

To reproduce:

git clone github.com/quarkusio/quarkus
cd core/class-change-agent
mvn clean package