当前位置: 首页 > 面试题库 >

在pom中添加selenium依赖项后,AWS Lambda Jar无法压缩

谢财
2023-03-14
问题内容

这是一个奇怪的错误。将selenium依赖项添加到我的maven项目的pom中并将其上传到lambda之后,它说无法解压缩文件。但是,在删除依赖项之后,lambda可以很好地解压缩文件(但是它附带了后来找不到的类)。我尝试过一个接一个地删除依赖项,但是每一个都会触发错误。

关于如何解决这个问题的任何想法?

找不到类错误

org/openqa/selenium/WebDriver: java.lang.NoClassDefFoundError
java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver

Lambda无法压缩错误

Calling the invoke API action failed with this message: Lambda was not able to unzip the file

导致问题的依赖项

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

更新的依赖关系(对于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>

组态

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

问题答案:

阴影插件将所有依赖项与开发的代码结合在一起,并在一个Uber
JAR中对其进行加密。缺点是它可以覆盖资源文件,并且不能与签名的jar一起很好地使用(至少以我的经验)。

如果可能的话,我建议远离阴影插件。

就是说,如果您必须使用它-您可能会遇到合并jar资源的问题。您可以使用许多变压器来解决此问题,并且您需要研究确实需要哪一个。我将从这样的事情开始

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

你可以找到关于Apache更发电产品的插件这里

我建议的替代方法是Spring Boot,它使用Jar-in-Jar结构和自定义ClassLoader来从内部jar中加载类。

由于不必像Shade插件方法那样重写文件,因此这是一种更简单的方法,它可以更好地处理依赖项。

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

认真地看一下简单的配置!

注意:大部分内容来自我自己的注释-版本号可能有点旧…



 类似资料:
  • 我试图在pom中为ojdbc14添加依赖项。xml 操作系统: WindowsXP(sp3)IDE: ECLIPSE(Juno)DB: Oracle 10G 我在eclipse中使用m2e插件。 我遵循添加ojdbc14的步骤。maven本地存储库中的jar > 创建一个新项目 执行命令“mvn install:install file-Dfile=“D:\oracle10g\jdbc\lib\o

  • 我想运行比较xml响应的Junit。为此,我想使用org。xmlunit和我在pom中添加了依赖项,如下所示 然而,当我运行maven安装时,我发现了以下错误。我在eclipse(Mars发行版(4.5.0))中使用嵌入式maven。有人能帮我解决这个错误吗。 [错误]未能在项目springWSSecurityCertOrderSvc上执行目标:无法解决项目com.anvesh.spring.ws

  • 下面是我的pom.xml文件 http://maven.apache.org/xsd/maven-4.0.0.xsd“>4.0.0

  • 问题内容: 如何获取我拥有的jar文件并将其添加到Maven 2的依赖系统中?我将成为此依赖项的维护者,并且我的代码需要在类路径中使用此jar,以便对其进行编译。 问题答案: 您必须分两步执行此操作: 1.给您的JAR一个groupId,artifactId和版本,然后将其添加到您的存储库中。 如果您没有内部存储库,而只是试图将JAR添加到本地存储库,则可以使用任意groupId / artifa

  • > Eclipse版本: Eclipse Java EE IDE for Web开发人员。 版本:Photon Release(4.8.0) 构建ID:20180619-1200 POM文件: http://maven.apache.org/xsd/maven-4.0.0.xsd“>4.0.0 null

  • 从我读到的内容来看,我似乎需要一个pom.xml文件。也许我应该先以某种方式将maven添加到项目中?