每个人的早安。
我有一个GWT应用程序,它使用ANT进行编译。
我正在尝试在Jenkins服务器上配置APP,但是当我启动ANT任务进行编译时,我收到此错误:
[java] Exception in thread "main" java.lang.NoClassDefFoundError:
[java] Caused by: java.lang.ClassNotFoundException:
[java] at java.net.URLClassLoader$1.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.
在我的本地电脑中,我可以毫无问题地编译。
最奇怪的是,在错误上,我无法看到ClassName。通常在这种错误中你可以看到"找不到主类:packageName / ClassName。程序将退出。"但在日志中我只看到一个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>
答案 0 :(得分:0)
检查ANT日志我发现其中一个setPaper('a4', 'landscape')
是一个空字符串。
这引起两个参数之间的两个空格。
在Windows上没有问题,但是在Linux上(使用Open JDK和Oracle JDK),参数在双空格中被剪切,其余的命令在空格后被忽略。
因此,该类不作为参数传递,这就是“java.lang.ClassNotFoundException”不打印类名的原因,因为实际上,ant正在尝试在类加载器中加载和清空类:
<jvmarg>
这引发了
ClassLoader.loadClass("");