0

Ich versuche, eine Alexa-App zu erstellen, mit einigen Anmerkungen getrieben Dependency-Injektion (Dolch 2) Code. Die alexa-sample-skills-test gibt Beispiel Pom und weist an, den folgenden Befehl zu verwenden, um ein Jar mit Abhängigkeiten zu erstellen.Unterschied: Maven Assembly: Assembly versus Assembly: einzelne Ziele?

mvn assembly:assembly -DdescriptorId=jar-with-dependencies package 

Gebäude mit versagen die oben mit der Ausnahme, und die Ausgabe in diesen link aufgeführt. Nach ein wenig Graben in maven docs, fand ich heraus, dass das Assembly: Assembly-Ziel nicht standardmäßige Build-Prozesse verwendet, die Chaos verursachen können. Das maven assembly-plugin docs empfiehlt stattdessen, das assembly: single goal zu verwenden. Daher verwende ich stattdessen den folgenden Befehl:

mvn assembly:single -DdescriptorId=jar-with-dependencies package 

Voila .. die Code-Kompilierung und Verknüpfung geht gut. Ich bekomme eine [Projektname] -jar-with-dependencies.jar-Datei. Wenn ich jedoch das Glas in den Amazon Server hochlade und versuche, die Fähigkeit zu testen, schlägt der Test fehl. Das Protokoll besagt, dass die Klasse: echo.client.AccountInfoStreamHandler nicht gefunden werden konnte (ClassNotFoundException). Diese Klasse passiert einfach mit einer Root-Launcher-Klasse, nehme ich an.

Jetzt nuke ich alle Dolch 2 Abhängigkeiten und wiederhole das gleiche mit der einfachsten Code-Basis. Der erste maven Befehl (Assembly: Assembly) funktioniert. Der zweite Maven-Befehl (Assembly: single) schlägt mit demselben "ClassNotFoundException" -Fehler fehl. Was mache ich falsch? Ich kenne Maven nicht sehr gut, und das ist wirklich das erste Mal, dass ich versuche, einen Maven-Befehl zu beheben. Alle Vorschläge, Hinweise, Empfehlungen werden sehr geschätzt.

als Referenz, die POM-Datei unten ist:

<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.apil.echo.accountant</groupId> 
    <artifactId>echo-device-client</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0</version> 
    <name>Echo Device Client</name> 

    <repositories> 
    <repository> 
     <id>alexa-skills-kit-repo</id> 
     <url>file://${project.basedir}/repo</url> 
    </repository> 
    <repository> 
     <id>Maven Central</id> 
     <url>http://repo1.maven.org/maven2/</url> 
    </repository> 
    </repositories> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.12</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-module-junit4</artifactId> 
     <version>1.6.4</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-api-mockito</artifactId> 
     <version>1.6.4</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-core</artifactId> 
     <version>2.5.3</version> 
    </dependency> 

    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-annotations</artifactId> 
     <version>2.5.3</version> 
    </dependency> 

    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>2.5.3</version> 
    </dependency> 

    <dependency> 
     <groupId>com.plaid</groupId> 
     <artifactId>plaid-java</artifactId> 
     <version>0.2.12</version> 
    </dependency> 
    <dependency> 
     <groupId>alexa-skills-kit</groupId> 
     <artifactId>alexa-skills-kit</artifactId> 
     <version>1.1</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-server</artifactId> 
     <version>9.0.6.v20130930</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-servlet</artifactId> 
     <version>9.0.6.v20130930</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.17</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.7.10</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.commons</groupId> 
     <artifactId>commons-lang3</artifactId> 
     <version>3.3.2</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.directory.studio</groupId> 
     <artifactId>org.apache.commons.io</artifactId> 
     <version>2.4</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.amazonaws</groupId> 
     <artifactId>aws-lambda-java-core</artifactId> 
     <version>1.0.0</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.amazonaws</groupId> 
     <artifactId>aws-java-sdk-dynamodb</artifactId> 
     <version>1.9.40</version> 
    </dependency> 

    <!-- using mockito for test --> 
    <dependency> 
     <groupId>org.mockito</groupId> 
     <artifactId>mockito-all</artifactId> 
     <version>1.9.5</version> 
     <scope>test</scope> 
    </dependency> 

     <dependency> 
      <groupId>com.google.dagger</groupId> 
      <artifactId>dagger</artifactId> 
      <version>2.0</version> 
     </dependency> 
     <dependency> 
      <groupId>com.google.dagger</groupId> 
      <artifactId>dagger-compiler</artifactId> 
      <version>2.0</version> 
      <optional>true</optional> 
     </dependency> 

    </dependencies> 

    <properties> 
    <property name="disableRequestSignatureCheck" value="false"/> 
    <property name="supportedApplicationIds" value=""/> 
    <property name="timestampTolerance" value="150"/> 
    </properties> 

    <build> 
    <pluginManagement> 
     <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.3</version> 
      <configuration> 
      <source>1.7</source> 
      <target>1.7</target> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>exec-maven-plugin</artifactId> 
      <version>1.2.1</version> 
      <configuration> 
      <mainClass>Launcher</mainClass> 
      <systemProperties> 
       <systemProperty> 
       <key>javax.net.ssl.keyStore</key> 
       <value>/insert/your/path/java-keystore.jks</value> 
       </systemProperty> 
       <systemProperty> 
       <key>javax.net.ssl.keyStorePassword</key> 
       <value>insert_your_password</value> 
       </systemProperty> 
       <systemProperty> 
       <key>com.amazon.speech.speechlet.servlet.disableRequestSignatureCheck</key> 
       <value>${disableRequestSignatureCheck}</value> 
       </systemProperty> 
       <systemProperty> 
       <key>com.amazon.speech.speechlet.servlet.supportedApplicationIds</key> 
       <value>${supportedApplicationIds}</value> 
       </systemProperty> 
       <systemProperty> 
       <key>com.amazon.speech.speechlet.servlet.timestampTolerance</key> 
       <value>${timestampTolerance}</value> 
       </systemProperty> 
      </systemProperties> 
      </configuration> 
     </plugin> 
     </plugins> 
    </pluginManagement> 
    </build> 
</project> 
+0

Nun, per [Dokumentation] (http://maven.apache.org/plugins/maven-assembly-plugin/)), Ich würde sagen, der größte Unterschied besteht darin, dass im Wesentlichen alle Ziele _except_ 'single' veraltet sind. – rmlan

+0

yapp. Aber in Bezug auf das, was sie tun, warum arbeitet man und nicht das andere? Für die meisten Ausnahmefälle sollten beide Ziele dasselbe sein, nein? –

Antwort

0

ich den gradle Build-Skripte mit Liquidation, die in jüngster Zeit für den alexa-Probe-Fähigkeiten-Test zur Verfügung gestellt wurde. Vorbereitende Build-Inspektionen zeigen, dass die erforderlichen Klassen: echo.client. [Class ..] im resultierenden Build vorhanden sind.

die uber-Gläser Inspizieren, die aus den oben Maven Befehle führte, bemerkte ich, dass

mvn assembly:assembly ...

in einem Glas ergab, dass das echo.client Paket mit der fehlenden Klasse hatte. Allerdings

mvn assembly:single...

resultierte in einem Glas, das nicht das echo.client Paket hat, oder eine der Anwendungsklassen innerhalb der Verpackung definiert. Daher bekam ich die ClassNotFoundException. Ich habe immer noch nicht herausgefunden, warum das passiert ist. Aber ich denke, die Zeit ist reif, von diesem Punkt an auf "Grape" zu wechseln ...