6

The full error message:

Failed to execute goal org.apache.maven.plugins:maven-shade-plugin:2.3:shade (default) on project --: Error creating shaded jar: INVOKESPECIAL/STATIC on interfaces require ASM 5 -> [Help 1]

The jarfile which I am attempting to shade is located in my own remote repository, using sonatype nexus. Here is my pom configuration:

<?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>com.codelanx</groupId>
    <artifactId>phanaticprison</artifactId>
    <version>1.0.0</version>
    <name>PhanaticPrison</name>
    <packaging>jar</packaging>

    <repositories>
        <repository>
            <id>bukkit-repo</id>
            <url>http://repo.bukkit.org/content/repositories/public/</url>
        </repository>
        <repository>
            <id>codelanx-repo</id>
            <url>http://repo.codelanx.com/content/repositories/public/</url>
        </repository>
    </repositories>
    <licenses>
        <license>
            <name>Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International</name>
            <url>https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode</url>
            <distribution>repo</distribution>
        </license>
    </licenses>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <artifactSet>
                        <includes>
                            <include>com.codelanx:codelanxlib</include>
                        </includes>
                    </artifactSet>
                    <minimizeJar>true</minimizeJar>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <targetPath>.</targetPath>
                <directory>${basedir}/src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <finalName>${project.name}</finalName>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.bukkit</groupId>
            <artifactId>bukkit</artifactId>
            <version>LATEST</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>com.codelanx</groupId>
            <artifactId>codelanxlib</artifactId>
            <version>LATEST</version>
            <type>jar</type>
        </dependency>
    </dependencies>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
</project>

Googling around for the error lead to very few results, the main parts of information that I gathered was that Java 8's static interface methods could cause this, however I haven't been able to find much more. The jarfile I am attempting to shade does indeed have one of these static methods, but even still surely I must be able to use them and shade the jar? I'm not sure what the error means by requiring "ASM 5" (assembly?), so any direction would be appreciated.

My effective pom (mvn help:effective-pom):

<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>com.phanaticmc</groupId>
  <artifactId>phanaticprison</artifactId>
  <version>1.0.0</version>
  <name>PhanaticPrison</name>
  <licenses>
    <license>
      <name>Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International</name>
      <url>https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode</url>
      <distribution>repo</distribution>
    </license>
  </licenses>
  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.bukkit</groupId>
      <artifactId>bukkit</artifactId>
      <version>LATEST</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.codelanx</groupId>
      <artifactId>codelanxlib</artifactId>
      <version>LATEST</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
  <repositories>
    <repository>
      <id>bukkit-repo</id>
      <url>http://repo.bukkit.org/content/repositories/public/</url>
    </repository>
    <repository>
      <id>codelanx-repo</id>
      <url>http://repo.codelanx.com/content/repositories/public/</url>
    </repository>
    <repository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Central Repository</name>
      <url>http://repo.maven.apache.org/maven2</url>
    </repository>
  </repositories>
  <pluginRepositories>
    <pluginRepository>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Central Repository</name>
      <url>http://repo.maven.apache.org/maven2</url>
    </pluginRepository>
  </pluginRepositories>
  <build>
    <sourceDirectory>C:\Users\Spencer\Documents\NetBeansProjects\PhanaticPrison\src\main\java</sourceDirectory>
    <scriptSourceDirectory>C:\Users\Spencer\Documents\NetBeansProjects\PhanaticPrison\src\main\scripts</scriptSourceDirectory>
    <testSourceDirectory>C:\Users\Spencer\Documents\NetBeansProjects\PhanaticPrison\src\test\java</testSourceDirectory>
    <outputDirectory>C:\Users\Spencer\Documents\NetBeansProjects\PhanaticPrison\target\classes</outputDirectory>
    <testOutputDirectory>C:\Users\Spencer\Documents\NetBeansProjects\PhanaticPrison\target\test-classes</testOutputDirectory>
    <resources>
      <resource>
        <targetPath>.</targetPath>
        <filtering>true</filtering>
        <directory>C:\Users\Spencer\Documents\NetBeansProjects\PhanaticPrison\src\main\resources</directory>
      </resource>
    </resources>
    <testResources>
      <testResource>
        <directory>C:\Users\Spencer\Documents\NetBeansProjects\PhanaticPrison\src\test\resources</directory>
      </testResource>
    </testResources>
    <directory>C:\Users\Spencer\Documents\NetBeansProjects\PhanaticPrison\target</directory>
    <finalName>PhanaticPrison</finalName>
    <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>1.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>2.2-beta-5</version>
        </plugin>
        <plugin>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-release-plugin</artifactId>
          <version>2.0</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.4</version>
      </plugin>
      <plugin>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.8</version>
      </plugin>
      <plugin>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.3</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <artifactSet>
                <includes>
                  <include>com.codelanx:codelanxlib</include>
                </includes>
              </artifactSet>
              <minimizeJar>true</minimizeJar>
            </configuration>
          </execution>
        </executions>
        <configuration>
          <artifactSet>
            <includes>
              <include>com.codelanx:codelanxlib</include>
            </includes>
          </artifactSet>
          <minimizeJar>true</minimizeJar>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-clean-plugin</artifactId>
        <version>2.4.1</version>
        <executions>
          <execution>
            <id>default-clean</id>
            <phase>clean</phase>
            <goals>
              <goal>clean</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.5</version>
        <executions>
          <execution>
            <id>default-testResources</id>
            <phase>process-test-resources</phase>
            <goals>
              <goal>testResources</goal>
            </goals>
          </execution>
          <execution>
            <id>default-resources</id>
            <phase>process-resources</phase>
            <goals>
              <goal>resources</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.3.2</version>
        <executions>
          <execution>
            <id>default-jar</id>
            <phase>package</phase>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <executions>
          <execution>
            <id>default-compile</id>
            <phase>compile</phase>
            <goals>
              <goal>compile</goal>
            </goals>
          </execution>
          <execution>
            <id>default-testCompile</id>
            <phase>test-compile</phase>
            <goals>
              <goal>testCompile</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.10</version>
        <executions>
          <execution>
            <id>default-test</id>
            <phase>test</phase>
            <goals>
              <goal>test</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-install-plugin</artifactId>
        <version>2.3.1</version>
        <executions>
          <execution>
            <id>default-install</id>
            <phase>install</phase>
            <goals>
              <goal>install</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-deploy-plugin</artifactId>
        <version>2.7</version>
        <executions>
          <execution>
            <id>default-deploy</id>
            <phase>deploy</phase>
            <goals>
              <goal>deploy</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-site-plugin</artifactId>
        <version>3.0</version>
        <executions>
          <execution>
            <id>default-site</id>
            <phase>site</phase>
            <goals>
              <goal>site</goal>
            </goals>
            <configuration>
              <outputDirectory>C:\Users\Spencer\Documents\NetBeansProjects\PhanaticPrison\target\site</outputDirectory>
              <reportPlugins>
                <reportPlugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-project-info-reports-plugin</artifactId>
                </reportPlugin>
              </reportPlugins>
            </configuration>
          </execution>
          <execution>
            <id>default-deploy</id>
            <phase>site-deploy</phase>
            <goals>
              <goal>deploy</goal>
            </goals>
            <configuration>
              <outputDirectory>C:\Users\Spencer\Documents\NetBeansProjects\PhanaticPrison\target\site</outputDirectory>
              <reportPlugins>
                <reportPlugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-project-info-reports-plugin</artifactId>
                </reportPlugin>
              </reportPlugins>
            </configuration>
          </execution>
        </executions>
        <configuration>
          <outputDirectory>C:\Users\Spencer\Documents\NetBeansProjects\PhanaticPrison\target\site</outputDirectory>
          <reportPlugins>
            <reportPlugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-project-info-reports-plugin</artifactId>
            </reportPlugin>
          </reportPlugins>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <reporting>
    <outputDirectory>C:\Users\Spencer\Documents\NetBeansProjects\PhanaticPrison\target\site</outputDirectory>
  </reporting>
</project>

Full maven stacktrace:

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-shade-plugin:2.3:shade (default) on project phanaticprison: Error creating shaded jar: INVOKESPECIAL/STATIC on interfaces require ASM 5
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
    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:483)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: org.apache.maven.plugin.MojoExecutionException: Error creating shaded jar: INVOKESPECIAL/STATIC on interfaces require ASM 5
    at org.apache.maven.plugins.shade.mojo.ShadeMojo.execute(ShadeMojo.java:566)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
    ... 19 more
Caused by: java.lang.IllegalArgumentException: INVOKESPECIAL/STATIC on interfaces require ASM 5
    at org.objectweb.asm.MethodVisitor.visitMethodInsn(Unknown Source)
    at org.objectweb.asm.commons.RemappingMethodAdapter.doVisitMethodInsn(Unknown Source)
    at org.objectweb.asm.commons.RemappingMethodAdapter.visitMethodInsn(Unknown Source)
    at org.objectweb.asm.ClassReader.a(Unknown Source)
    at org.objectweb.asm.ClassReader.b(Unknown Source)
    at org.objectweb.asm.ClassReader.accept(Unknown Source)
    at org.objectweb.asm.ClassReader.accept(Unknown Source)
    at org.vafer.jdependency.Clazzpath.addClazzpathUnit(Clazzpath.java:194)
    at org.vafer.jdependency.Clazzpath.addClazzpathUnit(Clazzpath.java:130)
    at org.apache.maven.plugins.shade.filter.MinijarFilter.addDependencyToClasspath(MinijarFilter.java:101)
    at org.apache.maven.plugins.shade.filter.MinijarFilter.<init>(MinijarFilter.java:81)
    at org.apache.maven.plugins.shade.mojo.ShadeMojo.getFilters(ShadeMojo.java:805)
    at org.apache.maven.plugins.shade.mojo.ShadeMojo.execute(ShadeMojo.java:458)
    ... 21 more
Tunaki
  • 132,869
  • 46
  • 340
  • 423
Rogue
  • 11,105
  • 5
  • 45
  • 71
  • update dependency plugin to `2.8` and assembly plugin to `2.4` and retry – jmj Jun 25 '14 at 18:16
  • @JigarJoshi currently I'm using the maven bundled with netbeans itself, would downloading and installing maven 3.x possibly fix all this? – Rogue Jun 25 '14 at 18:22
  • try just updating these two plugins in `pom.xml` like the way you are using shade plugin of version 2.3 – jmj Jun 25 '14 at 18:23
  • @JigarJoshi Same error, unfortunately – Rogue Jun 25 '14 at 18:25
  • looks like bug in assembly plugin to me, I would report it by making sure this exists with latest maven release (you are already on latest maven plugins) just update maven to latest release and if it still persist report it to assembly plugin issues http://jira.codehaus.org/browse/MNG – jmj Jun 25 '14 at 18:40

3 Answers3

9

Since I recently got the same problem and it took me quite a while to fix it, here's what I did:

The required version for ASM is 5.0.3. However, the currently available version in the shade plugin is 5.0.2. Looking at the JIRA tickets, it looked like it already was fixed in 2.4, but that version is not available for the public yet (it's May the 4th of 2015 by the time I'm writing this).

So all you have to do is activate the developer versions (Based on https://maven.apache.org/guides/development/guide-testing-development-plugins.html) by adding this section to your pom:

<pluginRepositories>
    <pluginRepository>
        <id>apache.snapshots</id>
        <url>http://repository.apache.org/snapshots/</url>
    </pluginRepository>
</pluginRepositories>

and setting the plugin's version to 2.4-SNAPSHOT:

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.4-SNAPSHOT</version>
    </plugin>
</plugins>

Hope this helps!

spaceemotion
  • 1,404
  • 4
  • 24
  • 32
  • 1
    This helps because you then use the fixed dependency I mentioned a few months ago. Still waiting for the release that contains the fix. – Bram May 04 '15 at 07:27
2

I've had a look into the source codes, and I see that the message "INVOKESPECIAL/STATIC on interfaces require ASM 5" means that the MethodVisitor is an ASM 5 method, but not instantiated with the proper parameter.

I submitted a patch on jdependency, which is accepted. To benefit you have to explicitly use that:

<dependencies>
     <dependency>
     <groupId>org.vafer</groupId>
     <artifactId>jdependency</artifactId>
     <version>1.0</version>
     </dependency>
</dependencies>

It should be included in maven-shade-plugin version 2.4 though. See also http://jira.codehaus.org/browse/MSHADE-174

Bram
  • 479
  • 2
  • 10
0

I'm guessing "ASM" means the asm library. Definitely make sure you're running with Maven 3, not Maven 2.x, and personally I'd try on the command line, not in the IDE.

When I run mvn dependency:resolve-plugins, using Maven 3.0.5, on a project containing the shade plugin, version 2.3, I see these dependencies in the output:

[INFO] Plugin Resolved: maven-shade-plugin-2.3.jar
[INFO]     Plugin Dependency Resolved: maven-plugin-api-3.0.jar
[INFO]     Plugin Dependency Resolved: maven-model-3.0.jar
[INFO]     Plugin Dependency Resolved: maven-core-3.0.jar
[INFO]     Plugin Dependency Resolved: maven-compat-3.0.jar
[INFO]     Plugin Dependency Resolved: maven-artifact-3.0.jar
[INFO]     Plugin Dependency Resolved: plexus-container-default-1.0-alpha-9-stable-1.jar
[INFO]     Plugin Dependency Resolved: plexus-utils-3.0.15.jar
[INFO]     Plugin Dependency Resolved: asm-5.0.2.jar
[INFO]     Plugin Dependency Resolved: asm-commons-5.0.2.jar
[INFO]     Plugin Dependency Resolved: jdom-1.1.jar
[INFO]     Plugin Dependency Resolved: maven-dependency-tree-2.1.jar
[INFO]     Plugin Dependency Resolved: jdependency-0.9.jar
[INFO]     Plugin Dependency Resolved: guava-11.0.2.jar

Note the ASM libraries, they are both version 5, which is what the error seems to be asking for. If you run with Maven 3 on the command line and still get the error, then I agree with Jigar that this seems like a bug in the plugin somehow.

user944849
  • 14,524
  • 2
  • 61
  • 83
  • What's strange is that even with maven 3 and the asm 5 plugin, it still gives me the error about needing ASM 5: http://pastie.org/pastes/9324894/text – Rogue Jun 26 '14 at 02:32