本文介绍了用于Intellij-IDEA GUI表单的Ant构建的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用表单的项目,它编译并运行得很好,
但是当使用生成的蚂蚁进行编译时它不会运行



我的ant文件有 java2任务,我将所需的jar添加到我的lib文件夹

 < property name =javac2.homevalue =lib / idea/> 
< path id =javac2.classpath>
< pathelement location =$ {javac2.home} /javac2.jar/>
< pathelement location =$ {javac2.home} /jdom.jar/>
< pathelement location =$ {javac2.home} /asm.jar/>
< pathelement location =$ {javac2.home} /asm-commons.jar/>
< pathelement location =$ {javac2.home} /jgoodies-forms.jar/>
< / path>
< taskdef name =javac2classname =com.intellij.ant.Javac2classpathref =javac2.classpath/>
< taskdef name =instrumentIdeaExtensionsclassname =com.intellij.ant.InstrumentIdeaExtensionsclasspathref =javac2.classpath/>

但是当我运行程序时出现以下错误:



'pre> 在线程异常 主要 java.lang.NoClassDefFoundError:抛出java.lang.ClassNotFoundException:COM /的IntelliJ / uiDesigner /核心/间隔
。通过致COM .intellij.uiDesigner.core.Spacer
在java.net.URLClassLoader的$ 1.run(URLClassLoader.java:202)
在java.security.AccessController.doPrivileged(本机方法)
是java .net.URLClassLoader.findClass(URLClassLoader.java:190)
在java.lang.ClassLoader.loadClass(ClassLoader.java:307)
在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java :301)
在java.lang.ClassLoader.loadClass(ClassLoader.java:248)

我注意到从Idea编译的版本在输出文件夹中有一些类(缺少什么),而ant生成的版本没有这些类。



编辑:我从下面实现了解决方案,这意味着我修改了d my ant build将forms_rt.jar的内容解压缩到我的输出文件夹

 < unjar src =$ {javac2。 home} /forms_rt.jardest =$ {webserver.output.dir}> 
< patternset>
< include name =** / * .class/>
< / patternset>
< / unjar>


解决方案

您需要在IDEA_HOME \中包含forms_rt.jar通过清单或从这个jar中解压缩类并将它们与应用程序的最终jar包装在一起,重新进入应用程序的类路径。



当你从IDEA,它会自动将所需的类复制到输出中(通过Settings | GUI Designer中的选项进行控制)。


I have a project using forms, it compiles and runs just fine,but when compiled with the generated ant it doesn't run

my ant file has the java2 task and i added the needed jars to my lib folder

  <property name="javac2.home" value="lib/idea"/>
  <path id="javac2.classpath">
    <pathelement location="${javac2.home}/javac2.jar"/>
    <pathelement location="${javac2.home}/jdom.jar"/>
    <pathelement location="${javac2.home}/asm.jar"/>
    <pathelement location="${javac2.home}/asm-commons.jar"/>
    <pathelement location="${javac2.home}/jgoodies-forms.jar"/>
  </path>
  <taskdef name="javac2" classname="com.intellij.ant.Javac2" classpathref="javac2.classpath"/>
  <taskdef name="instrumentIdeaExtensions" classname="com.intellij.ant.InstrumentIdeaExtensions" classpathref="javac2.classpath"/>

but when I run my program I get the following error:

Exception in thread "main" java.lang.NoClassDefFoundError: com/intellij/uiDesigner/core/Spacer
Caused by: java.lang.ClassNotFoundException: com.intellij.uiDesigner.core.Spacer
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)

I have noticed that the version compiled from the Idea has some classes in the output folder (what is missing) while the ant generated version doesn't have those classes.

EDIT: i implemented the solution from below, this means I modified my ant build to extract the content of forms_rt.jar to my output folder

<unjar src="${javac2.home}/forms_rt.jar" dest="${webserver.output.dir}">
          <patternset>
              <include name="**/*.class"/>
          </patternset>
</unjar>
解决方案

You need to include forms_rt.jar from IDEA_HOME\redist into the classpath of your application, either via manifest or by unpacking the classes from this jar and packaging them together with the final jar of your application.

When you compile from IDEA, it copies the required classes to the output automatically (it's controlled via an option in Settings | GUI Designer).

这篇关于用于Intellij-IDEA GUI表单的Ant构建的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-20 20:02