Este é um erro estranho. Depois de adicionar as dependências de selênio ao pom do meu projeto maven e enviá-lo a um lambda, ele diz que não é capaz de descompactar o arquivo. No entanto depois de remover as dependências, o lambda é capaz de descompactar o arquivo apenas multa (no entanto, ele vem com uma classe não encontrada depois). Eu tentei remover as dependências, um por um, mas cada um gatilhos o erro.
Todas as ideias sobre como resolver isso?
erro de classe não encontrado
org/openqa/selenium/WebDriver: java.lang.NoClassDefFoundError
java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver
lambda não pode zip erro
Calling the invoke API action failed with this message: Lambda was not able to unzip the file
As dependências causando o problema
<dependency>
<groupId>org.seleniumhq.webdriver</groupId>
<artifactId>webdriver-common</artifactId>
<version>0.9.7376</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
<version>3.141.59</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
dependências atualizados (por Vishal)
<dependency>
<groupId>org.seleniumhq.webdriver</groupId>
<artifactId>webdriver-common</artifactId>
<version>0.9.7376</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
<version>3.141.59</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-api</artifactId>
<version>2.0rc2</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-remote-driver</artifactId>
<version>3.141.59</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-support</artifactId>
<version>3.141.59</version>
</dependency>
Configuração
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<forceJavacCompilerUse>true</forceJavacCompilerUse>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
A sombra do plugin combina todas as dependências com o código desenvolvido e estatela-los em um JAR Uber. A desvantagem é que ele pode substituir os arquivos de recursos, e não joga bem com frascos assinados (na minha experiência, pelo menos).
Eu recomendaria se afastando do plug-in sombra, se possível.
Dito isto, se você tem que usá-lo - você está problema pode ser com a combinação dos recursos jar. Há muitos transformadores que você pode usar para resolver isso, e você vai precisar para investigar qual deles é realmente necessário. Gostaria de começar com algo parecido com isto
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<configuration>
<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>${executable.classifier}</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>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>fully.qualified.ClassName</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
Você pode encontrar mais Tranformers no Apache plug-in aqui
A alternativa que eu sugiro que está a mola de arranque, que utiliza a estrutura do frasco-em-Jar com um carregador de classes personalizada para as classes de carga a partir do frasco interno (s).
Este é o método mais fácil devido a não ter a arquivos re-escrita como a abordagem Sombra plugin e ele lida com as dependências um pouco melhor.
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.3.6.RELEASE</version>
<configuration>
<classifier>${executable.classifier}</classifier>
<layout>ZIP</layout>
<mainClass>fully.qualified.ClassName</mainClass>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
Sério, olhar para a configuração mais simples!
NOTA: A maior parte desse aumento veio de minhas próprias anotações - Versão números podem ser um pouco velho ...