使用ANT

时间:2018-03-05 09:01:51

标签: java jenkins gwt ant

每个人的早安。

我有一个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>

1 个答案:

答案 0 :(得分:0)

检查ANT日志我发现其中一个setPaper('a4', 'landscape')是一个空字符串。 这引起两个参数之间的两个空格。

在Windows上没有问题,但是在Linux上(使用Open JDK和Oracle JDK),参数在双空格中被剪切,其余的命令在空格后被忽略。

因此,该类不作为参数传递,这就是“java.lang.ClassNotFoundException”不打印类名的原因,因为实际上,ant正在尝试在类加载器中加载和清空类:

<jvmarg>

这引发了

ClassLoader.loadClass("");