3

プロジェクトは、私のローカル コンピューターで完全にコンパイルおよび実行されます。デプロイしようとするたびに、次のエラーが発生します。

Unable to update:
com.google.appengine.tools.admin.JspCompilationException: Failed to compile the      generated JSP java files.
at com.google.appengine.tools.admin.Application.compileJavaFiles(Application.java:803)
at com.google.appengine.tools.admin.Application.compileJsps(Application.java:760)
at com.google.appengine.tools.admin.Application.createStagingDirectory(Application.java:592)
at com.google.appengine.tools.admin.AppAdminImpl.doUpdate(AppAdminImpl.java:370)
at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java:53)
at com.google.appengine.tools.admin.AppCfg$UpdateAction.execute(AppCfg.java:1163)
at com.google.appengine.tools.admin.AppCfg.<init>(AppCfg.java:232)
at com.google.appengine.tools.admin.AppCfg.<init>(AppCfg.java:109)
at com.google.appengine.tools.admin.AppCfg.main(AppCfg.java:105)

私はたくさんグーグルで検索し、見つけたすべての解決策を適用しました。Eclipse が JRE ではなく JDK を使用していることを確認しました。jdk の tools.jar を AppEngineSDK の lib/shared に入れてみました。何もうまくいかなかったので、別のアプローチを試すことにしました。ゲストブックのデモを出発点として使用しました。Guestbook のデモは、変更されていない場合は完全にデプロイされました。しかし、私はそれを変更しました。以下のコードを、guestbook.jsp から別の .jsp ファイル (includement.jsp) に移動します。そして、guestbook.jsp で <%@ include file="/includement.jsp" %> を使用します。で、これです。ローカル コンピューターで完全に動作します。しかし、上記のエラーが表示されてデプロイされません。

移動したコードは次のとおりです。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.List" %>
<%@ page import="com.google.appengine.api.users.User" %>
<%@ page import="com.google.appengine.api.users.UserService" %>
<%@ page import="com.google.appengine.api.users.UserServiceFactory" %>
<%@ page import="com.google.appengine.api.datastore.DatastoreServiceFactory" %>
<%@ page import="com.google.appengine.api.datastore.DatastoreService" %>
<%@ page import="com.google.appengine.api.datastore.Query" %>
<%@ page import="com.google.appengine.api.datastore.Entity" %>
<%@ page import="com.google.appengine.api.datastore.FetchOptions" %>
<%@ page import="com.google.appengine.api.datastore.Key" %>
<%@ page import="com.google.appengine.api.datastore.KeyFactory" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<%
String guestbookName = request.getParameter("guestbookName");
if (guestbookName == null) {
    guestbookName = "default";
}
pageContext.setAttribute("guestbookName", guestbookName);
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
if (user != null) {
  pageContext.setAttribute("user", user);
%>

私は今一週間苦労しており、かなり絶望的です. それがローカルで機能し、展開されないということは、私には意味がありません。

4

3 に答える 3

1

うーん...これはあなたの質問には答えませんが、他の人には役立つかもしれません。

私はちょうど非常に似たような状況にありました。ローカルでは問題なく動作しましたが、デプロイ時にファイルが見つからないというエラーが発生しました。静的ファイルに関するこのページ ( https://developers.google.com/appengine/docs/java/gettingstarted/staticfiles ) にアクセスして、考えさせられました。

私のインクルード ファイルには jsp 拡張子がなく、アプリ エンジンによって静的ファイルと見なされていたため、任意のサーバーから提供できました。これとは逆の意味で、jsp ファイルは 1 つのサーバーからのみ提供され、インクルード ファイルは jsp ページから参照されているため、同じ制約があり、静的ファイルにすることはできません。それを考えると、それは理にかなっています。インクルード ファイルがローカルに提供されると、順番に動作し、ページの作成に問題はありません。それらの同じファイルを他のサーバーに置くと、同期の問題が発生します。インクルード ファイルを、提供されるページに対してローカルに保持する方がはるかに理にかなっています。

私の場合、インクルードの名前を jsp 拡張機能に変更したところ、うまく機能しました。jsp 拡張機能が既にあるので、あなたの場合はそうではありません。これは奇妙です。

- 編集 -

話すのが早すぎた。それは機能し、再び壊れました。gae が「生成された JSP Java ファイルのコンパイルに失敗しました」を返すようになりました。もちろん、ローカルで正常に動作します...

于 2013-07-21T03:37:45.470 に答える
0

別の JSP に含まれる JSP が、独自の適切な依存関係をインポートせずにコンパイルできるとは思えません。この例はどこにも見つかりませんでした。これが開発サーバーで機能したと言うのは奇妙です。

以下に、メイン ページと含まれている 2 つの JSP の例を示します。

index.jsp

<html>                                                                                                                                                                                                    
<head>
</head>                                                                                                                                                                                           
<body>                                                                                         
    <pre>                                                                                                  
        <%@ page import="java.util.List" %> 
        <%@ page import="java.util.ArrayList" %>                                                                   
        <jsp:include page="include.jsp" />                                                                                           
    </pre>                                                                                                                                                                                                                
</body>                                                                                                                                                                                                                 
</html>

include.jsp

<%
List<String> cats = new ArrayList<String>();                                                                        
cats.add ("Milo");                                                                                             
cats.add ("Dya");                                                                        
for (Object cat : cats) {                                                                                      
   out.println (cat.toString());                                                                               
}                                                                                                           
%> 

これは、ブラウザーに次のように表示されて失敗します。

HTTP ERROR 500

Problem accessing /. Reason:

    Unable to compile class for JSP: 

An error occurred at line: 4 in the jsp file: /include.jsp
List cannot be resolved to a type
1: <%
2: 
3: 
4: List<String> cats = new ArrayList<String>();
5: cats.add ("Milo");
6: cats.add ("Dya");
7: 


An error occurred at line: 4 in the jsp file: /include.jsp
ArrayList cannot be resolved to a type
1: <%
2: 
3: 
4: List<String> cats = new ArrayList<String>();
5: cats.add ("Milo");
6: cats.add ("Dya");
7: 

これは、クラスを使用する JSP 内でクラスを適切にページ インポートすると解決されます。

<%@ page import="java.util.List" %>                                                                    
<%@ page import="java.util.ArrayList" %>                                                                                                                
<%                                                                                                            
List<String> cats = new ArrayList<String>();                                                                   
cats.add ("Milo");                                                                                             
cats.add ("Dya");                                                                                            
for (Object cat : cats) {                                                                                      
   out.println (cat.toString());                                                                               
}                                                                                                             
%>

これにより、予想どおり、2 匹の素晴らしい小さな猫の名前が出力されます。

Milo
Dya
于 2015-12-18T15:25:09.473 に答える