Reputation: 11483
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
Upvotes: 6
Views: 10997
Reputation: 1536
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!
Upvotes: 9
Reputation: 479
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
Upvotes: 2
Reputation: 14951
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.
Upvotes: 0