2017-07-01 21 views
2

AWSラムダ関数を作成しましたが、AWSでデプロイメントをセットアップしようとしています。私はAWS CodeCommitに自分のコードを押すと、正常に実行されたプロセスを構築し、今AWS CodeBuildがファットjarの作成に失敗しました

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 

をしかし、出力S3バケットにのみ130キロバイトの出力ファイルがある:私は、次の内容のbuildspec.ymlファイルを作成しました。

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

Iを:私は日陰のプラグインを追加して、私のpom.xmlファイルで

Error loading class com.test.handler: org/apache/log4j/Logger: class java.lang.NoClassDefFoundError

:これは私の依存関係が作成したパッケージから欠落している、と私は私のラムダを実行しようとすることを意味し、私は次のエラーを得ました私のPC上でコマンドmvn packageを実行しても問題ありません。すべての依存関係(サイズは10MBを少し超えています)を含むjarファイルを取得し、このjarファイルをAWSラムダ関数に手動でデプロイすると、

また、このチュートリアルの後に試したところ、Linkでも何も変わりませんでした。

誰かが、私は本当に私がここで行方不明ですか分からない助けてください:/

+0

ビルドログが何を言うのですか?彼らはあなたのPC上のログと異なるのですか? – Unsigned

+1

問題の解決策を見つけました。 buildspec.ymlファイル(AWS CodeStarによって自動生成される)は無効です。詳細はこちら:https://forums.aws.amazon.com/thread.jspa?threadID=255273 – newbie

答えて

0

アプリケーションを実行時には、jarファイルを見つけることができません。ジャレッドによってこの回答から撮影

この場合にはまっすぐ私たちの頭の中で二つの異なる例外を維持することが重要である:

にjava.lang.ClassNotFoundExceptionこの例外はクラスが上の見つからなかったことを示していますクラスパスこれは、クラス定義をロードしようとしていて、そのクラスがクラスパス上に存在しなかったことを示しています。

java.lang.NoClassDefFoundErrorこの例外は、JVMが内部クラス定義データ構造内でクラスの定義を調べ、見つからなかったことを示します。これは、クラスパスからロードできないということとは異なります。通常、クラスパスからクラスをロードしようとしましたが、何らかの理由で失敗しました。今度は再試行していますが、読み込みに失敗したためロードしようとしません。初期の失敗は、ClassNotFoundExceptionまたはExceptionInInitializerError(静的初期化ブロックの失敗を示す)または他の多くの問題である可能性があります。ポイントは、NoClassDefFoundErrorはクラスパスの問題であるとは限りません。類似点と相違点について

は参照してください。

What causes and what are the differences between NoClassDefFoundError and ClassNotFoundException?

あなたはあなたのポンポンファイルに次のMavenの依存関係を使用することができます。それ以外の場合は、netから次の2つのjarファイルをダウンロードし、ビルドパスに追加することができます。

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

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-log4j12</artifactId> 
    <version>1.6.4</version> 
</dependency> 
+0

あなたの回答はTnxです。私はNoClassDefFoundErrorとClassNotFoundExceptionの違いを研究しました。このエラーは、lmabdaを呼び出した後のコードの最初の行であるため、log4jに表示されます。私の問題、私の質問、私は非常に明確だと信じています。それは、awsコードビルドが何らかの形でシェードプラグインを無視し、mvnパッケージが実行されたときに依存関係を含んでいないことを示しています。 log4jは私が私のソリューションで持っている多くの依存性のうちの1つに過ぎません。コードビルドからの出力パッケージのサイズによって、依存関係はパッケージ化されていないことは明らかです。したがって、私は明らかに何かが欠落しています。 – newbie

関連する問題