首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Maven阴影插件找不到'mainClass‘的例外吗?

Maven阴影插件找不到'mainClass‘的例外吗?
EN

Stack Overflow用户
提问于 2016-03-30 06:28:02
回答 2查看 11.1K关注 0票数 5

在一个标准的maven项目中,有一个非常奇怪的maven-shade-plugin:2.4.3构建。当执行maven包命令时,被抛出始终找不到mainClass异常。我只是模拟了一个maven-阴影插件的例子,如下所示:

代码语言:javascript
复制
<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mkyong.core.utils</groupId>
    <artifactId>dateUtils</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>dateUtils</name>
    <url>http://maven.apache.org</url>

    <properties>
        <jdk.version>1.7</jdk.version>
        <jodatime.version>2.5</jodatime.version>
        <junit.version>4.11</junit.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>${jodatime.version}</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>dateutils</finalName>

        <resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
        <plugins>

            <!-- download source code in Eclipse, best practice -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>false</downloadJavadocs>
                </configuration>
            </plugin>

            <!-- Set a compiler level -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>${jdk.version}</source>
                    <target>${jdk.version}</target>
                </configuration>
            </plugin>

            <!-- Maven Shade Plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.4.3</version>
                <executions>
                    <!-- Run shade goal on package phase -->
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
          </execution>
                </executions>
        <configuration>
            <shadedArtifactAttached>true</shadedArtifactAttached>
            <shadedClassifierName>jar-with-dependencies</shadedClassifierName>
            <filters>
                <filter>
                    <artifact>*:*</artifact>
                    <excludes>
                        <exclude>META-INF/*.SF</exclude>
                        <exclude>META-INF/*.DSA</exclude>
                        <exclude>META-INF/*.RSA</exclude>
                    </excludes>
                </filter>
            </filters>
            <transformers>
              <transformer
                      implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>com.mkyong.core.utils.App</mainClass>
              </transformer>
          </transformers>
        </configuration>

            </plugin>

        </plugins>
    </build>

</project>

这个可以成功。然后只需更改主类名,以及其他类似的内容:

代码语言:javascript
复制
<plugin>
     <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
                <configuration>
                    <transformers>
                        <transformer
                                implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                            <mainClass>xxxxxxx</mainClass>
                        </transformer>
                    </transformers>
                </configuration>
            </plugin>

插件行的父pom.xml文件:

代码语言:javascript
复制
<pluginManagement>
    <plugins>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.3</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <shadedArtifactAttached>true</shadedArtifactAttached>
                <shadedClassifierName>jar-with-dependencies</shadedClassifierName>
                <filters>
                    <filter>
                        <artifact>*:*</artifact>
                        <excludes>
                            <exclude>META-INF/*.SF</exclude>
                            <exclude>META-INF/*.DSA</exclude>
                            <exclude>META-INF/*.RSA</exclude>
                        </excludes>
                    </filter>
                </filters>
            </configuration>
        </plugin>
    </plugins>

</pluginManagement>

因此,模块将扩展父模块,但是当包抛出异常时,它说:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-shade-plugin:2.4.3:shade (default) on project analytics-sdk-storm-local: Unable to parse configuration of mojo org.apache.maven.plugins:maven-shade-plugin:2.4.3:shade for parameter mainClass: Cannot find 'mainClass' in class org.apache.maven.plugins.shade.resource.AppendingTransformer -> [Help 1]

但是为什么是happened.There是maven依赖关系树显示的:

代码语言:javascript
复制
[INFO] --- maven-dependency-plugin:2.10:tree (default-cli) @ xxxxx ---
[INFO] local:jar:1.0.1-SNAPSHOT
[INFO] +- org.apache.kafka:kafka_2.10:jar:0.8.1.1:compile
[INFO] |  +- com.yammer.metrics:metrics-core:jar:2.2.0:compile
[INFO] |  +- org.xerial.snappy:snappy-java:jar:1.1.2:compile
[INFO] |  +- net.sf.jopt-simple:jopt-simple:jar:3.2:compile
[INFO] |  +- org.scala-lang:scala-library:jar:2.10.1:compile
[INFO] |  \- com.101tec:zkclient:jar:0.3:compile
[INFO] +- org.apache.storm:storm-core:jar:0.9.3:provided
[INFO] |  +- org.clojure:clojure:jar:1.5.1:provided
[INFO] |  +- clj-time:clj-time:jar:0.4.1:provided
[INFO] |  +- joda-time:joda-time:jar:2.8.2:provided
[INFO] |  +- compojure:compojure:jar:1.1.3:provided
[INFO] |  +- org.clojure:core.incubator:jar:0.1.0:provided
[INFO] |  +- org.clojure:tools.macro:jar:0.1.0:provided
[INFO] |  +- clout:clout:jar:1.0.1:provided
[INFO] |  +- ring:ring-core:jar:1.1.5:provided
[INFO] |  +- commons-fileupload:commons-fileupload:jar:1.3.1:provided
[INFO] |  +- javax.servlet:servlet-api:jar:2.5:provided
[INFO] |  +- hiccup:hiccup:jar:0.3.6:provided
[INFO] |  +- ring:ring-devel:jar:0.3.11:provided
[INFO] |  +- clj-stacktrace:clj-stacktrace:jar:0.2.2:provided
[INFO] |  +- ring:ring-jetty-adapter:jar:0.3.11:provided
[INFO] |  +- ring:ring-servlet:jar:0.3.11:provided
[INFO] |  +- org.mortbay.jetty:jetty:jar:6.1.26:provided
[INFO] |  +- org.mortbay.jetty:jetty-util:jar:6.1.26:provided
[INFO] |  +- org.clojure:tools.logging:jar:0.2.3:provided
[INFO] |  +- org.clojure:math.numeric-tower:jar:0.0.1:provided
[INFO] |  +- org.clojure:tools.cli:jar:0.2.4:provided
[INFO] |  +- commons-io:commons-io:jar:2.4:provided
[INFO] |  +- org.apache.commons:commons-exec:jar:1.1:provided
[INFO] |  +- commons-lang:commons-lang:jar:2.5:provided
[INFO] |  +- com.googlecode.json-simple:json-simple:jar:1.1.1:provided
[INFO] |  |  \- junit:junit:jar:4.12:provided
[INFO] |  |     \- org.hamcrest:hamcrest-core:jar:1.3:provided
[INFO] |  +- com.twitter:carbonite:jar:1.4.0:provided
[INFO] |  +- com.esotericsoftware.kryo:kryo:jar:2.21:provided
[INFO] |  +- com.esotericsoftware.reflectasm:reflectasm:jar:shaded:1.07:provided
[INFO] |  +- org.ow2.asm:asm:jar:4.0:compile
[INFO] |  +- com.esotericsoftware.minlog:minlog:jar:1.2:provided
[INFO] |  +- org.objenesis:objenesis:jar:1.2:compile
[INFO] |  +- com.twitter:chill-java:jar:0.3.5:provided
[INFO] |  +- org.yaml:snakeyaml:jar:1.16:provided
[INFO] |  +- commons-logging:commons-logging:jar:1.1.3:provided
[INFO] |  +- commons-codec:commons-codec:jar:1.9:provided
[INFO] |  +- com.googlecode.disruptor:disruptor:jar:2.10.1:provided
[INFO] |  +- org.jgrapht:jgrapht-core:jar:0.9.0:provided
[INFO] |  +- ch.qos.logback:logback-classic:jar:1.1.5:provided
[INFO] |  +- ch.qos.logback:logback-core:jar:1.0.13:provided
[INFO] |  +- org.slf4j:slf4j-api:jar:1.7.12:compile
[INFO] |  +- org.slf4j:log4j-over-slf4j:jar:1.7.16:provided
[INFO] |  \- jline:jline:jar:2.11:compile
[INFO] +- org.apache.storm:storm-kafka:jar:0.9.3:compile
[INFO] |  \- org.apache.curator:curator-framework:jar:2.5.0:compile
[INFO] |     +- org.apache.curator:curator-client:jar:2.5.0:compile
[INFO] |     +- org.apache.zookeeper:zookeeper:jar:3.4.6:compile
[INFO] |     |  \- io.netty:netty:jar:3.7.0.Final:compile
[INFO] |     \- com.google.guava:guava:jar:19.0:compile
[INFO] +- so.sao.analytics:analytics-sdk-common:jar:1.0.1-SNAPSHOT:compile
[INFO] |  +- com.esotericsoftware:kryo:jar:3.0.3:compile
[INFO] |  |  +- com.esotericsoftware:reflectasm:jar:1.10.1:compile
[INFO] |  |  \- com.esotericsoftware:minlog:jar:1.3.0:compile
[INFO] |  \- org.mapdb:mapdb:jar:2.0-beta12:compile
[INFO] \- so.sao.analytics:analytics-sdk-storm-common:jar:1.0.1-SNAPSHOT:compile

我真的不知道为什么失败了。现在只需注释代码。你见过这个,给我看,谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-04-30 20:26:15

我也有过同样的问题。结果发现,它是由一些配置Spring引入的。我正在使用spring启动启动父母作为我的父pom。

我通过设置start-class属性和从ManifestResourceTransformer中的阴影插件中删除ManifestResourceTransformer配置来解决这个问题。

代码语言:javascript
复制
<properties>
  <start-class>package.Main</start-class>
</properties>

我通过搜索ManifestResourceTransformer的有效pom找到了这个属性。

票数 7
EN

Stack Overflow用户

发布于 2016-03-30 07:13:45

根据您发布的内容,您已经从插件配置中移除了很多内容。在<executions>部分中,您需要指定目标。

修改您的pom.xml如下

代码语言:javascript
复制
<project>
    ...
    <build>
        <plugins>
            ...
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.4.3</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <transformers>
                        <transformer
                            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                            <mainClass>your.Main</mainClass>
                        </transformer>
                    </transformers>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

执行mvn package将在./target中创建阴影Jar。在日志中,您应该会看到类似的内容。

代码语言:javascript
复制
[INFO] Replacing ../target/..-SNAPSHOT.jar with ../target/..-SNAPSHOT-shaded.jar

由于您没有显示您的pom.xml,请查看下面的差异。

在已发布的作为实现类的pom.xml片段中

代码语言:javascript
复制
org.apache.maven.plugins.shade.resource.ManifestResourceTransformer

但这个例外会抱怨

代码语言:javascript
复制
org.apache.maven.plugins.shade.resource.AppendingTransformer
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36301277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档