【環境、ミドルウェア】
eclipse 4.6 neon
Java 1.6
Tomcat 6
フレームワーク:Seasar2
上記のようなJavaのWebアプリのプロジェクトに対して、
AWS SDK for Java v1.11(AWS SDK for Java)
をダウンロードして、lib配下とthird-party配下のjarファイルを\webapp\WEB-INF\lib 配下に格納(Seasar2はこの場所で良いはず)し、「プロパティ」→「Javaのビルド・パス」→「ライブラリー」タブ→「JARの追加」しました。
AamazonS3に格納されているテキストファイルを取得するという簡単なコードを書きました。
AWS関連のインポート文が追加され、特にeclipse上ではコンパイルエラーがない状態です。
Java
1 // 認証情報を用意 2 AWSCredentials credentials = null; 3 try { 4 credentials = new BasicAWSCredentials(S3_ACCESS_KEY, S3_SECRET_KEY); 5 } catch (Exception e) { 6 throw new AmazonClientException( 7 "Cannot load the credentials from the credential profiles file. " + 8 "Please make sure that your credentials file is at the correct " + 9 "location (~/.aws/credentials), and is in valid format.", 10 e); 11 } 12 13 // クライアントを生成 14 AmazonS3 client = AmazonS3ClientBuilder 15 .standard() 16 // 認証情報を設定 17 .withCredentials(new AWSStaticCredentialsProvider(credentials)) 18 // リージョンを AP_NORTHEAST_1(東京) に設定 19 .withRegion(Regions.AP_NORTHEAST_1) 20 .build(); 21 22 // 取得するファイルのバケット名とキー名(ファイルパス)を用意 23 GetObjectRequest request = new GetObjectRequest(S3_BUCKET_NAME, "export/var/upload/test.txt"); 24 25 // === ファイルに直接保存する場合 === 26 // 格納先のファイル 27 File file = new File("C:\vmanas\temp\aws\test001.txt"); 28 29 // オブジェクトの取得 30 client.getObject(request, file); 31
そしていざ、アプリを起動して、
目的のコードに達する画面を開こうとすると、下記のようにNoClassDefFoundErrorが発生します。
コードに到達する前の時点です。
java.lang.NoClassDefFoundError: com/amazonaws/auth/AWSCredentials
java.lang.Class.forName0(Native Method) java.lang.Class.forName(Class.java:249) org.seasar.framework.util.ClassUtil.forName(ClassUtil.java:98) org.seasar.framework.convention.impl.NamingConventionImpl.findClass(NamingConventionImpl.java:610) org.seasar.framework.convention.impl.NamingConventionImpl.fromComponentNameToClass(NamingConventionImpl.java:536) org.seasar.framework.container.creator.ComponentCreatorImpl.createComponentDef(ComponentCreatorImpl.java:281) org.seasar.framework.container.hotdeploy.HotdeployBehavior.createComponentDef(HotdeployBehavior.java:228) org.seasar.framework.container.hotdeploy.HotdeployBehavior.getComponentDef(HotdeployBehavior.java:174) org.seasar.framework.container.impl.S2ContainerBehavior$DefaultProvider.acquireFromHasComponentDef(S2ContainerBehavior.java:172) org.seasar.framework.container.impl.S2ContainerBehavior.acquireFromHasComponentDef(S2ContainerBehavior.java:86) org.seasar.framework.container.impl.S2ContainerImpl.hasComponentDef(S2ContainerImpl.java:456) org.seasar.struts.config.S2ActionMapping.createRoutingPath(S2ActionMapping.java:150) org.seasar.struts.config.S2ActionMapping.createForward(S2ActionMapping.java:119) org.seasar.struts.action.ActionWrapper.execute(ActionWrapper.java:160) org.seasar.struts.action.ActionWrapper.execute(ActionWrapper.java:87) org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) org.seasar.struts.action.S2RequestProcessor.process(S2RequestProcessor.java:132) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) javax.servlet.http.HttpServlet.service(HttpServlet.java:643) javax.servlet.http.HttpServlet.service(HttpServlet.java:723) org.seasar.extension.filter.RequestDumpFilter.doFilter(RequestDumpFilter.java:127) org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79) org.seasar.framework.container.hotdeploy.HotdeployFilter.doHotdeployFilter(HotdeployFilter.java:86) org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:67) org.seasar.struts.filter.RoutingFilter.forward(RoutingFilter.java:219) org.seasar.struts.filter.RoutingFilter.doFilter(RoutingFilter.java:90) org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79) org.seasar.framework.container.hotdeploy.HotdeployFilter.doHotdeployFilter(HotdeployFilter.java:99) org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:67) org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69)
原因
java.lang.ClassNotFoundException: com.amazonaws.auth.AWSCredentials
java.lang.ClassLoader.findClass(ClassLoader.java:358)
java.lang.ClassLoader.loadClass(ClassLoader.java:306)
org.seasar.framework.container.hotdeploy.HotdeployClassLoader.loadClass(HotdeployClassLoader.java:76)
java.lang.ClassLoader.loadClass(ClassLoader.java:247)
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Class.java:249)
org.seasar.framework.util.ClassUtil.forName(ClassUtil.java:98)
org.seasar.framework.convention.impl.NamingConventionImpl.findClass(NamingConventionImpl.java:610)
org.seasar.framework.convention.impl.NamingConventionImpl.fromComponentNameToClass(NamingConventionImpl.java:536)
org.seasar.framework.container.creator.ComponentCreatorImpl.createComponentDef(ComponentCreatorImpl.java:281)
org.seasar.framework.container.hotdeploy.HotdeployBehavior.createComponentDef(HotdeployBehavior.java:228)
org.seasar.framework.container.hotdeploy.HotdeployBehavior.getComponentDef(HotdeployBehavior.java:174)
org.seasar.framework.container.impl.S2ContainerBehavior$DefaultProvider.acquireFromHasComponentDef(S2ContainerBehavior.java:172)
org.seasar.framework.container.impl.S2ContainerBehavior.acquireFromHasComponentDef(S2ContainerBehavior.java:86)
org.seasar.framework.container.impl.S2ContainerImpl.hasComponentDef(S2ContainerImpl.java:456)
org.seasar.struts.config.S2ActionMapping.createRoutingPath(S2ActionMapping.java:150)
org.seasar.struts.config.S2ActionMapping.createForward(S2ActionMapping.java:119)
org.seasar.struts.action.ActionWrapper.execute(ActionWrapper.java:160)
org.seasar.struts.action.ActionWrapper.execute(ActionWrapper.java:87)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
org.seasar.struts.action.S2RequestProcessor.process(S2RequestProcessor.java:132)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
org.seasar.extension.filter.RequestDumpFilter.doFilter(RequestDumpFilter.java:127)
org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
org.seasar.framework.container.hotdeploy.HotdeployFilter.doHotdeployFilter(HotdeployFilter.java:86)
org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:67)
org.seasar.struts.filter.RoutingFilter.forward(RoutingFilter.java:219)
org.seasar.struts.filter.RoutingFilter.doFilter(RoutingFilter.java:90)
org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
org.seasar.framework.container.hotdeploy.HotdeployFilter.doHotdeployFilter(HotdeployFilter.java:99)
org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:67)
org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69)
NoClassDefFoundErrorを調べてみると、
クラスパスが原因とか、アプリケーション・コンパイル時のJDKの環境と、アプリケーション実行時のJDKの環境が異なるなど出てきて「Java コンパイラー 準拠レベル」と「インストール済みのJRE」をjava6に合わせ対応しましたが、解消できない状態です。
どなたか詳しい方、
ご教授頂けますと幸いです。
何卒宜しくお願い致します。
あなたの回答
tips
プレビュー