用 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:
大家早上好
我有一个使用 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:
中加载并清空 classClassLoader.loadClass("");
这激怒了
java.lang.NoClassDefFoundError: