LoginSignup
1
1

More than 3 years have passed since last update.

S3 アクセス利用時にClassNotFound が発生

Last updated at Posted at 2019-01-07

はじめに

Aws を利用したアプリ(例えば、S3) をローカルで作成。
Eclipse を利用して動作確認をして、さあECS 上確認するぞ!といったところで、
java.lang.NoClassDefFoundError が発生。

java.lang.NoClassDefFoundError: com/amazonaws/services/s3/AmazonS3

実際にwar の中を確認すると、/WEB-INF/lib配下に、aws-java-ask-s3 が含まれていることを確認
これを解決する際に調べたことのメモ

結論

aws ask を含んだモジュールはスタンドアローンなjar ファイルではなく、スタンドアローンなwarファイルではない。
そのため、以下のプラグインをpom.xml に含める必要がある。

maven-shade-plugin

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

<参考>
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/java-create-jar-pkg-maven-no-ide.html

※ 本家サイトのlambda サイトに記載あり
※ 2.3 のバージョンは最新ではないが、本家の記載に従っていたほうが無難。

補足

maven-shade-plugin

依存するライブラリ(jarファイル)を生成物のするjar内に含めることができるライブラリ。
利用すると、下記の2種類のjarファイルが生成される。
originalのprefix がついている方が、依存ライブラリを含んでいないjar ファイルで、容量に違いがみられる。(解凍すると、ディレクトリ構成が異なる)

xxx-1.0.0-SNAPSHOT
original-xxx-1.0.0-SNAPSHOT

詳細な公式ページは下記
https://maven.apache.org/plugins/maven-shade-plugin/

スタンドアローンなjar とは

※ スタンドアローンなjar の意味がわからなかったので忘備の調査記録

英語だと、下記。
standalone jar
stand alone で独り立ちできるjar ファイルというのが直接的な意味

わかりやすい日本語だと、実行可能jarファイルという意味。

スタンドアローンなjarは単体で実行できるjar。
スタンドアローンなjarではないことは、そのjarだけでは実行できないという意味になる。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1