0

J'essaye de construire une application d'alexa, avec un certain code d'injection de dépendance conduit par des annotations (poignard 2). Le alexa-sample-skills-test donne l'exemple pom et indique comment utiliser la commande suivante pour créer un fichier jar avec des dépendances.différence: maven assemblage: assemblage contre assemblage: buts uniques?

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

bâtiment à l'aide de défaillance ci-dessus à l'exception et de sortie figurant dans ce link. Après avoir creusé un peu dans maven docs, j'ai découvert que l'objectif assembly: assembly utilise des processus de construction non standard qui peuvent provoquer des havocs. Le maven assembly-plugin docs à la place, recommande d'utiliser l'assembly: objectif unique. Par conséquent, j'utilise la commande suivante à la place:

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

Voila .. le code de compilation et de liaison va bien. Je reçois un fichier [project-name] -jar-with-dependencies.jar. Cependant, lorsque je télécharge le fichier jar sur le serveur Amazon et que j'essaie de tester la compétence, le test échoue. Le journal indique que la classe: echo.client.AccountInfoStreamHandler est introuvable (ClassNotFoundException). Cette classe arrive à une classe de lancement de root, je suppose.

Maintenant, je nuke toutes les dépendances dagger 2 et répète la même chose avec la base de code la plus simple. La première commande maven (assembly: assembly) fonctionne. La deuxième commande maven (assembly: single) échoue avec la même erreur "ClassNotFoundException". Qu'est-ce que je fais mal? Je ne suis pas très familier avec maven, et c'est vraiment la première fois que j'essaye de dépanner une commande maven. Toutes les suggestions, les pointeurs, les recommandations sont grandement appréciés.

Pour référence, le fichier POM est ci-dessous:

<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

Eh bien, selon la [documentation] (http://maven.apache.org/plugins/maven-assembly-plugin/), Je dirais que la plus grande différence est que pratiquement tous les objectifs _except_ 'single' ont été dépréciés. – rmlan

+0

yapp. Mais en termes de ce qu'ils font, pourquoi travaille-t-on et pas l'autre? Pour la plupart, sauf cas exceptionnels, ces deux objectifs devraient faire la même chose, non? –

Répondre

0

Je liquidée en utilisant les scripts de compilation Gradle qui ont été récemment fournies pour les compétences alexa-échantillons-test. Les vérifications de construction préliminaires montrent que les classes requises: echo.client. [Classe ..] existe dans la construction résultante.

les pots de Inspecter uber qui ont résulté des commandes Maven ci-dessus, je remarquai que

mvn assembly:assembly ...

a donné lieu à un pot qui avait le paquet echo.client avec la classe manquante. Cependant,

mvn assembly:single...

a donné lieu à un pot qui n'a pas eu le paquet echo.client, ou l'une des classes d'application définies dans le package. Par conséquent, j'obtenais l'exception ClassNotFoundException. Je n'ai toujours pas compris pourquoi cela se passait. Cependant, je pense que le moment est venu de passer à 'gradle' à partir de ce point ...