Сбой Ant build с генерацией и генерацией Boilerplate (GWT-Platform) - PullRequest
2 голосов
/ 13 декабря 2011

У меня есть build.xml, который отлично работает, пока я не начну использовать генерацию шаблонов и создаю Генератор.

Все отлично работает в режиме разработки, но я не смог создать войну для своего приложения.

Я думаю, это потому, что классы gen будут /apt_generated, а не /src, и мой муравей компилирует /src, я просто не имею представления о генераторах.

Я просто пытаюсь заставить его работать, но я не могу.

Может ли кто-нибудь мне помочь?

Мой build.xml похож на это:

<property name="version" value="1.0.0-SNAPSHOT"/>
    <property name="gwt.module.name" value="com.test.Test"/>
    <property name="server.resources.name" value="server_resources"/>
    <property name="jar.name" value="test${version}.jar"/>
    <property name="war.name" value="test${version}.war"/>
    <property name="src.dir" location="src"/>
    <property name="server.resources.dir" location="war/${server.resources.name}"/>
    <property name="build.dir" location="build"/>    
    <property name="build.server.resources.dir" location="war/WEB-INF/classes/server_resources"/>        
    <property name="lib.dir" location="war/WEB-INF/lib"/>
    <property name="gwt.client.dir" location="com/test/client"/>

    <path id="project.classpath">        
        <fileset dir="${lib.dir}">
            <include name="**/*.jar"/>
        </fileset>
    </path>  

    <target name="prepare">
        <mkdir dir="${build.dir}"/>
    </target>

    <target name="clean">
        <delete dir="${build.dir}"/>
    </target>  

    <!-- Compile the java source code using javac -->
    <target name="compile" depends="prepare">        
        <javac srcdir="${src.dir}" destdir="${build.dir}">
            <classpath refid="project.classpath"/>
        </javac>        
    </target>       
    <!-- Invoke the GWT compiler to create the Javascript for us -->
   <target name="gwt-compile" depends="compile">
        <java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler">
            <classpath>
                <!-- src dir is added to ensure the module.xml file(s) are on the classpath -->
                <pathelement location="${src.dir}"/>                
                <pathelement location="${build.dir}"/>
                <path refid="project.classpath"/>
            </classpath>
            <jvmarg value="-Xmx512M"/>
            <arg value="${gwt.module.name}"/>
         </java>
     </target>
    <!-- Package the compiled Java source into a JAR file -->
    <target name="jar" depends="compile">        
        <jar jarfile="${lib.dir}/${jar.name}" basedir="${build.dir}/">
            <!-- Don't wrap any of the client only code into the JAR -->
            <exclude name="${gwt.client.dir}/**/*.class"/>
        </jar>    
    </target>
    <!-- Copy the static server resources into the required 
    directory ready for packaging -->    
    <target name="copy-resources">
        <copy todir="${build.server.resources.dir}" preservelastmodified="true">
            <fileset dir="${server.resources.dir}"/>            
        </copy>
    </target>    
    <!-- Package the JAR file, Javascript, static resources 
    and external libraries into a WAR file -->
    <target name="war" depends="gwt-compile, jar, copy-resources">
        <war basedir="war" destfile="${war.name}" webxml="war/WEB-INF/web.xml">
            <exclude name="WEB-INF/**" />
            <exclude name="${server.resources.name}/**"/>
            <webinf dir="war/WEB-INF/">
                <include name="classes/${server.resources.name}/**" />
                <include name="**/*.jar" />
                <!-- <exclude name="**/gwt-dev.jar" /> -->
                <exclude name="**/gwt-user.jar" />
            </webinf>
        </war>
    </target>    

</project>

Ошибки:

[javac] D:\CARLOS\workspaces\Test\Test\src\com\test\server\actionhandlers\autenticar\RecuperarSenhaActionHandler.java:50: cannot find symbol
[javac] symbol  : class RecuperarSenhaAction
[javac] location: class com.test.server.actionhandlers.autenticar.RecuperarSenhaActionHandler
[javac]     public void undo(RecuperarSenhaAction arg0, RecuperarSenhaResult arg1, ExecutionContext arg2) throws ActionException

[javac] D:\CARLOS\workspaces\Test\Test\src\com\test\server\i18n\EnumMessageGenerator.java:84: cannot find symbol
[javac] symbol  : class SourceWriter
[javac] location: class com.test.server.i18n.EnumMessageGenerator
[javac]             SourceWriter sw = composer.createSourceWriter(context, printWriter);
[javac]             ^
[javac] 15 errors

РЕДАКТИРОВАТЬ.

Я изменяю свой build.xml, теперь у меня есть еще одно свойство, <property name="apt_generated.dir" location="apt_generated" />, и моя компиляцияцель превращается в это:

<target name="compile" depends="prepare">
        <javac destdir="${build.dir}">
            <src location="${src.dir}" />
            <src location="${apt_generated.dir}" />
            <classpath refid="project.classpath" />
        </javac>
    </target>

Это "решает" проблему с apt_generated (я думаю), но я все еще не могу построить ее из-за ошибок с классами SourceWriter и javax.validation.

1 Ответ

2 голосов
/ 14 декабря 2011

Сгенерированные классы тоже должны быть скомпилированы. Поскольку в вашем примере я не вижу генерации кода, я принял следующие значения.

 <target name="compile" depends="prepare">    
        <-- compile generated classes-->
        <javac srcdir="${apt_generated.dir}" destdir="${build.generated.dir}">
            <classpath refid="project.classpath"/>
        </javac>    

        <-- compile sources -->   
        <javac srcdir="${src.dir}" destdir="${build.dir}">
            <classpath location="${build.generated.dir}"/>
            <classpath refid="project.classpath"/>
        </javac>        
    </target>  

Как указано в вашем комментарии, сгенерированные классы зависят от источников и наоборот, поэтому вам необходимо:

  • Либо разделите ваш проект, чтобы все общие зависимости были в другом проекте
  • ИЛИ компилировать все вместе

Второй может быть выполнен как:

 <target name="compile" depends="prepare">    
     <javac destdir="${build.dir}">
        <src location="${src.dir}" />
        <src location="${apt_generated.dir}" />
        <classpath refid="project.classpath" />
     </javac>   
 </target>  

Если что-то еще пропущено, убедитесь, что:

  • соответствующая библиотека включена в project.classpath (если вы не уверены, какую банку вам не хватает, вы можете попробовать http://www.findjar.com
  • все источники находятся на одном из источников src dir
...