2

EclipseでGWTプロジェクトを取得しましたが、それ以外の場合は機能します。ここで、サーバー上で実行されるスクリプトが必要です。このスクリプトは、ソース管理から最新バージョンを取得し、サーバー上でコンパイルして展開します。これにより、多くの手作業が節約され、帯域幅が制限された接続時に新しいバージョンを展開できるようになります(アプリケーションをサーバーにアップロードする必要がないため)。

最新バージョンのソースコードをプルした後、スクリプトは次のコマンドを使用してコードをコンパイルしようとします。

java -cp "/path/eclipse/plugins/com.google.gwt.eclipse.sdkbundle_2.5.0.v201211121240-rel-r42/gwt-2.5.0/*:/path/company/projects/pull-compile-deploy/X/X/src:/path/company/projects/pull-compile-deploy/X/X/war/WEB-INF/lib/*" com.google.gwt.dev.Compiler nl.company.projects.X

Compiling module nl.company.projects.X
   Finding entry point classes
      [ERROR] Unable to find type 'nl.company.projects.X.client.XMain'
         [ERROR] Hint: Previous compiler errors may have made this type unavailable
         [ERROR] Hint: Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly

すべてのソースコードがに/path/company/projects/pull-compile-deploy/X/X/srcあり、使用されているすべての.jar(GWTのものを除く)がにあり/path/company/projects/pull-compile-deploy/X/X/war/WEB-INF/lib/ます。明らかに何かがうまくいかない。

質問:ファイル/path/company/projects/pull-compile-deploy/X/X/src/nl/company/projects/X/client/XMain.javaは存在し、クラスパスにimhoを含める必要がありますか?!誰かここで何がうまくいかないかもしれないという考えはありますか?eclipseがコンパイルのために実行するコマンドを正確にログで確認できる可能性はありますか?eclipseがエクスポートできるbuild.xmlを調べましたが、本番用にコンパイルするターゲットが含まれていないようです。

他の何か:明らかにGWTはにあるX.gwt.xmlことを期待していますが/path/company/projects/pull-compile-deploy/X/X/src/nl/company/project/X.gwt.xml、Eclipseはそれを入れました/path/company/projects/pull-compile-deploy/X/X/src/nl/company/project/X/X.gwt.xml(つまり、1つのディレクトリを深くネストしました)が、シンボリックリンクを作成することでこれを修正しました。

さらに編集: 1つの回答は、コンパイルツールを呼び出す方法に焦点を当てていたため、Antで書き直しました。以下を参照してください。もちろん問題は残っています。

<!-- Compile the source using javac. -->
<target name="compile" depends="init">
    <javac srcdir="src/" destdir="bin/">
        <classpath refid="project.classpath"/>
    </javac>
</target>


<!-- Use the GWT-compiler. -->
<target name="gwt-compile" depends="compile">
    <java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler">
        <classpath>
            <path refid="project.classpath"/>
            <pathelement location="src/"/>
            <pathelement location="bin/"/>
        </classpath>
        <jvmarg value="-Xmx512M"/>
        <arg value="${module.name}"/>
    </java>
</target>

上記のAntスクリプトに何か問題がありますか? module.name = nl.company.projects.Xのパスにrefid="project.classpath"は、使用されているすべてのライブラリとGWTライブラリ(gwt-user.jar、gwt-dev.jar、validation-api-1.0.0.GA(-source).jar)が含まれています。

XMainクラスは(Objectから以外は)何も継承せず、EntryPoint(gwt-user.jarに含まれている)のみを実装します。したがって、この問題は、コンパイラーが提供する2番目のヒントに関連しているとは思いません。

何か案は?

4

2 に答える 2

1

GWTはjavacクラスにあなたを必要とします、それは*.java*.classファイルの両方を必要とします。

これは常に当てはまるわけではなく、将来変更する必要があります(たとえば、https://code.google.com/p/google-web-toolkit/issues/detail?id = 7602を参照)が、今のところはそうです。状況:あなたがjavacできる前にあなたはする必要がありますcom.google.gwt.dev.Compiler

javac -cp "/path/eclipse/plugins/com.google.gwt.eclipse.sdkbundle_2.5.0.v201211121240-rel-r42/gwt-2.5.0/*:/path/company/projects/pull-compile-deploy/X/X/war/WEB-INF/lib/*" -sourcepath /path/company/projects/pull-compile-deploy/X/X/src /path/company/projects/pull-compile-deploy/X/X/src/nl/company/projects/X.java -d /path/company/projects/pull-compile-deploy/X/X/bin

java -cp "/path/eclipse/plugins/com.google.gwt.eclipse.sdkbundle_2.5.0.v201211121240-rel-r42/gwt-2.5.0/*:/path/company/projects/pull-compile-deploy/X/X/src:/path/company/projects/pull-compile-deploy/X/X/bin:/path/company/projects/pull-compile-deploy/X/X/war/WEB-INF/lib/*" com.google.gwt.dev.Compiler nl.company.projects.X

(使用する前に上記のコマンドを再確認してください)

編集:(あなたの「質問」に応じてX.gwt.xml):GWTはX.gwt.xmlを期待します。これは、X.gwt.xmlnl/company/projects/X.gwt.xmlを使用するように指示したためですmodule.name = nl.company.projects.x。ファイルがにある場合は、モジュール名としてnl/company/projects/X/X.gt.xml使用します。nl.company.projects.X.Xここでシンボリックリンクを使用すると、問題が発生する可能性があります。モジュールのソースパス(https://developers.google.com/web-toolkit/doc/latest/DevGuideOrganizingProjects#DevGuideModuleXmlで検索)が取得され、取得さ<sourceれます。クラスが住んでいる場所は含まれません。これはGWTコンパイラでは利用できません。nl/company/projects/clientnl/company/projects/X/clientXMain


そうは言っても、私はSSRに完全に同意します。Ant、Maven、Gradle、Makeなどの適切なビルドツールを使用すると、作業が非常に簡単になります。依存関係(Ant + Ivy、Maven、Gradle)を管理するビルドツールは、さらに優れたIMOです。

于 2013-01-22T15:00:07.727 に答える
-1

なぜこのような非標準のビルド演習を行うのでしょうか。

非アカデミックプロジェクトの場合は、Mavenを使用してください。Mavenが難しい場合は、antを使用してください。

両方のタイプの例は、GWTチームによって提供されています-http://code.google.com/p/google-web-toolkit/source/browse/#svn%2Ftrunk%2Fsamples

注-mavenには、標準化された方法で試行しているほとんどのことを実行するプラグインがあります。

于 2013-01-22T14:47:31.653 に答える