用 ANT 编译 GWT

Compiling GWT with ANT

大家早上好

我有一个使用 ANT 进行编译的 GWT 应用程序。

我试图在 Jenkins 服务器上配置 APP,但是当我启动 ANT 任务进行编译时,我收到此错误:

 [java] Exception in thread "main" java.lang.NoClassDefFoundError: 
 [java] Caused by: java.lang.ClassNotFoundException: 
 [java]     at java.net.URLClassLoader.run(URLClassLoader.java:202)
 [java]     at java.security.AccessController.doPrivileged(Native Method)
 [java]     at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
 [java]     at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
 [java]     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
 [java]     at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
 [java] Could not find the main class: .  Program will exit.
  [antcall] Exiting /var/quark/repositories/jenkins/workspace/AMSSISAL-NEW_CLS_FRONTEND/build.xml.

在我的本地PC上,我可以毫无问题地编译。

最奇怪的是,在错误上,我看不到Class名称。通常在这种错误中你可以看到 "Could not find the main class: packageName/ClassName. Program will exit." 但在日志中我只看到一个 WhiteSpace 而不是 Class 名称。有人知道为什么会发生这种情况吗?

编辑:这是我的 ANT 编译任务:

<target name="gwtc"depends="javac"description="GWT compile to JavaScript">
<parallel threadsperprocessor="1">
    <java failonerror="true"fork="true"classname="com.google.gwt.dev.Compiler">
        <classpath>
            <pathelementlocation="src"/>
            <pathrefid="project.class.path"/>
        </classpath>
        <jvmarg value="-Xms5120M"/>
        <jvmarg value="-Xmx10240M"/>
        <jvmarg value="-XX:PermSize=128m"/>
        <jvmarg value="-XX:MaxPermSize=1024m"/>
        <jvmarg value="-XX:MinHeapFreeRatio=80"/>
        <jvmarg value="-XX:MaxHeapFreeRatio=95"/>
        <jvmarg value="-verbose:gc"/>
        <jvmarg value="-XX:+UseConcMarkSweepGC"/>
        <jvmarg value="-XX:+UseCompressedOops"/>
        <jvmarg value="-XX:+CMSParallelRemarkEnabled"/>
        <jvmarg value="-XX:+CMSIncrementalMode"/>
        <jvmarg value="-XX:+CMSIncrementalPacing"/>
        <jvmarg value="-XX:+UseParNewGC"/>
        <jvmarg value="-XX:+AggressiveOpts"/>
        <jvmarg value="-server"/>
        <arg value="-logLevel"/>
        <arg value="ERROR"/>
        <arg value="-style"/>
        <arg value="OBF"/>
        <arg value="-optimize"/>
        <arg value="9"/>
        <arg value="-localWorkers"/>
        <arg value="4"/>
        <arg value="my.GWT.module"/>
    </java>
</parallel>

检查 ANT 日志我发现 <jvmarg> 之一是空字符串。 这会导致两个参数之间有两个空白 space。

在 windows 上没有问题,但是在 linux 上(使用 Open JDK 和 Oracle JDK)参数被切割成双 space 并且在 space 之后忽略命令的其余部分。

所以,class 没有作为参数传递,这就是 "java.lang.ClassNotFoundException" 不打印 class 名称的原因,因为真的,蚂蚁正在尝试在 classloader:

中加载并清空 class
ClassLoader.loadClass("");

这激怒了

java.lang.NoClassDefFoundError: