2016-03-30 15 views
3

Es gibt einen sehr seltsamen Build mit maven-shade-plugin:2.4.3 in einem Standard-Maven-Projekt. Es war Wurf kann mainClass Ausnahme nicht immer finden, wenn Paketbefehl ausführen. Ich simuliere einfach ein maven-shade-plugin Beispiel, siehe unten:Maven Shade Plugin kann 'mainClass' Ausnahme nicht finden?

Dieser kann erfolgreich ausgeführt werden. Dann einfach den Namen Hauptklasse ändern, und andere wie folgt aus:

<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> 

die Mutter pom.xml Datei über das Plugin Linie:

<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> 

So sind die Module erstreckt sich Eltern, aber wenn Paket wirft Ausnahme, sagte:

[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]

Aber warum es happened.There sind die maven Abhängigkeiten Baum Show war:

[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 

Ich weiß wirklich nicht, warum es fehlgeschlagen ist. Jetzt nur den Code notieren. Hast du diesen hier getroffen, zeig mir, danke.

Antwort

0

Basierend auf dem, was Sie gepostet haben, haben Sie zu viel aus der Plugin-Konfiguration entfernt. Im Abschnitt <executions> müssen Sie das Ziel angeben.

ändern Ihre pom.xml wie unten

<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 Executing in ./target der schraffierte Jar schaffen. In dem Protokoll sollten Sie etwas ähnliches

[INFO] Replacing ../target/..-SNAPSHOT.jar with ../target/..-SNAPSHOT-shaded.jar 

wie sehen Sie nicht zeigen Sie Ihre pom.xml einen Blick auf folgende Diskrepanz haben.

in den entsandten pom.xml Snippet Sie als Implementierungsklasse

org.apache.maven.plugins.shade.resource.ManifestResourceTransformer 

aber die Ausnahme beschwert sich über

org.apache.maven.plugins.shade.resource.AppendingTransformer 
+0

ja, es hatte gleiche configure in meiner Eltern Modul 'pom.xml'-Datei haben. Habe auch auf die offizielle Verwendung verwiesen [maven-shade-plugin/examples/resource-transformers] (https://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html#AppendingTransformer). Aber es war immer noch fehlgeschlagen. und in meinem anderen Projekt laufen diese Einstellungen gut. Es ist so komisch. – elkan1788

+0

@ elkan1788 Sehen Sie sich meine aktualisierte Antwort an. Vielleicht gibt es in Ihrer tatsächlich verwendeten 'pom.xml' eine Art Tippfehler. – SubOptimal

+0

Danke, der Kern in meiner 'pom.xml' Datei war derselbe wie in der Demo, du kannst meine Upgrade Frage sehen. Auch ich fühle mich seltsam ist das gleiche wie Sie, warum es AppendingTransformer Ausnahme wirft. Vielleicht gibt es noch eine andere Fehlereinstellung in meinem Projekt? – elkan1788