Maven AWS CodeBuild无法创建Fat jar

Maven AWS CodeBuild无法创建Fat jar,maven,aws-lambda,maven-shade-plugin,uberjar,aws-codebuild,Maven,Aws Lambda,Maven Shade Plugin,Uberjar,Aws Codebuild,我已经创建了AWS Lambda函数,现在我正在尝试在AWS上设置部署。我创建了buildspec.yml文件,其中包含以下内容: version: 0.1 phases: build: commands: - echo Entering build phase... - echo Build started on `date` - mvn package shade:shade - mv target/classes/* .

我已经创建了AWS Lambda函数,现在我正在尝试在AWS上设置部署。我创建了buildspec.yml文件,其中包含以下内容:

version: 0.1

phases:
  build:
    commands:
      - echo Entering build phase...
      - echo Build started on `date`
      - mvn package shade:shade
      - mv target/classes/* .
      - rm -rf target src buildspec.yml pom.xml
      - aws cloudformation package --template template.json --s3-bucket $S3_BUCKET --output-template template-export.json
artifacts:
  type: zip
  files:
    - template-export.json
现在,当我将代码推送到AWS CodeCommit时,构建过程已成功运行,但在输出s3存储桶中只有130 kb的输出文件。这意味着创建的包中缺少依赖项,当我尝试运行Lambda时,出现以下错误:

加载类com.test.handler时出错: org/apache/log4j/Logger:class java.lang.NoClassDefFoundError

在我的pom.xml文件中,我添加了shade插件:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<configuration>
    <createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
    <execution>
        <phase>package</phase>
        <goals>
            <goal>shade</goal>
        </goals>
    </execution>
</executions>
</plugin>

org.apache.maven.plugins
,但一切都没有改变


有人能帮忙吗,我真的不知道我在这里遗漏了什么:/

在运行时,您的应用程序无法找到jar

摘自Jared的回答:

在这种情况下,在我们的头脑中保持两种不同的例外情况是很重要的:

java.lang.ClassNotFoundException此异常表示在类路径上找不到该类。这表明我们试图加载类定义,而类路径上不存在该类

java.lang.NoClassDefFoundError此异常表示JVM在其内部类定义数据结构中查找了类的定义,但没有找到它。这不同于说它不能从类路径加载。通常这表示我们以前试图从类路径加载类,但由于某种原因失败了-现在我们正在重试,但我们甚至不打算尝试加载它,因为我们之前加载失败。早期的故障可能是ClassNotFoundException或ExceptionInInitializeError(指示静态初始化块中的故障)或任何数量的其他问题。关键是,NoClassDefFoundError不一定是类路径问题

有关相同点和不同点,请参阅:

您可以在pom文件中使用以下maven依赖项。否则,您可以从net下载以下两个JAR并将其添加到构建路径中

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.6.4</version>

org.slf4j
slf4j api
1.6.4


org.slf4j
slf4j-log4j12
1.6.4

Tnx以获取您的回复。我确实研究了NoClassDefFoundError和ClassNotFoundException之间的差异。log4j会出现此错误,因为在调用lmabda之后,这是第一行代码。我的问题,我的问题,我相信是非常清楚的。在执行mvn包时,aws代码构建似乎忽略了shade插件,并且不包含依赖项。log4j只是我的解决方案中的许多依赖项之一。根据代码构建的输出包的大小,很明显依赖项并没有打包,所以我显然遗漏了一些东西。构建日志怎么说?它们与你电脑上的日志不同吗?我找到了解决问题的方法。buildspec.yml文件(由AWS CodeStar自动生成)似乎无效。详情如下:
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>1.6.4</version>
</dependency>