我有这个Ant文件:
<?xml version="1.0"?>
<project name="tetris" default="all" basedir=".">
<description>
simple example build file
</description>
<!-- set global properties for this build -->
<property name="name" value="tetris"/>
<property name="src" location="src"/>
<property name="bin" location="bin"/>
<property name="dist" location="dist"/>
<property name="classpath" value="${dist}/${name}.jar"/>
<property name="main" value="com.els.test.Game"/>
<target name="init">
<!-- Create the time stamp -->
<tstamp/>
<!-- Create the bin directory structure used by compile -->
<mkdir dir="${bin}"/>
</target>
<target name="compile" depends="init"
description="compile the source">
<!-- Compile the java code from ${src} into ${bin} -->
<javac srcdir="${src}" destdir="${bin}" debug="on" deprecation="on"/>
</target>
<target name="dist" depends="compile"
description="generate the distribution">
<!-- Create the distribution directory -->
<mkdir dir="${dist}"/>
<!-- Put everything in ${bin} into the MyProject-${DSTAMP}.jar file -->
<!-- <jar jarfile="${dist}/MyProject-${DSTAMP}.jar" basedir="${bin}"/> -->
<jar jarfile="${dist}/${name}.jar" basedir="${bin}"/>
</target>
<target name="run" depends="dist"
description="Run the program">
<java classname="${main}"
classpath="${classpath}"/>
</target>
<!-- Delete the ${bin} directory trees -->
<target name="clean"
description="clean up">
<delete dir="${bin}"/>
<mkdir dir="${bin}"/>
<delete dir="${dist}"/>
<mkdir dir="${dist}"/>
</target>
<target name="all" depends="clean,compile,dist,run"/>
</project>
并报告错误如下:
[jar] Building jar: /Users/richardlee/Code/tetris/tetrisCode/dist/tetris.jar
run:
[java] java.lang.Error: Cannot load com.apple.laf.AquaLookAndFeel
[java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:198)
[java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:834)
[java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:228)
[java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:137)
[java] at org.apache.tools.ant.taskdefs.Java.execute(Java.java:110)
[java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:293)
[java] at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
[java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[java] at java.lang.reflect.Method.invoke(Method.java:498)
[java] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[java] at org.apache.tools.ant.Task.perform(Task.java:348)
[java] at org.apache.tools.ant.Target.execute(Target.java:435)
[java] at org.apache.tools.ant.Target.performTasks(Target.java:456)
[java] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1405)
[java] at org.apache.tools.ant.Project.executeTarget(Project.java:1376)
[java] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
[java] at org.apache.tools.ant.Project.executeTargets(Project.java:1260)
[java] at org.apache.tools.ant.Main.runBuild(Main.java:857)
[java] at org.apache.tools.ant.Main.startAnt(Main.java:236)
[java] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:287)
[java] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:113)
[java] Caused by: java.lang.Error: Cannot load com.apple.laf.AquaLookAndFeel
[java] at javax.swing.UIManager.initializeDefaultLAF(UIManager.java:1351)
[java] at javax.swing.UIManager.initialize(UIManager.java:1459)
[java] at javax.swing.UIManager.maybeInitialize(UIManager.java:1426)
[java] at javax.swing.UIManager.getUI(UIManager.java:1006)
[java] at javax.swing.JPanel.updateUI(JPanel.java:126)
[java] at javax.swing.JPanel.<init>(JPanel.java:86)
[java] at javax.swing.JPanel.<init>(JPanel.java:109)
[java] at javax.swing.JPanel.<init>(JPanel.java:117)
[java] at com.els.view.GamePanel.<init>(GamePanel.java:21)
[java] at com.els.test.Game.main(Game.java:18)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[java] at java.lang.reflect.Method.invoke(Method.java:498)
[java] at org.apache.tools.ant.taskdefs.ExecuteJava.run(ExecuteJava.java:221)
[java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:154)
[java] ... 20 more
[java] Java Result: -1
all:
BUILD SUCCESSFUL
Total time: 1 second
但我可以使用命令&#34; java ...&#34;:
运行.class文件cd bin
java com.els.test.Game
build.xml文件有什么用?
答案 0 :(得分:0)
我在macOS Catalina 10.15.1上从jdk.java.net运行Java JDK-14,从ant.apache.org运行Ant apache-ant-1.10.7。如此说来,在build.xml中为Java任务添加 fork =“ true” 即可解决此问题。 build.xml文件附在下面:
<project name="Threads" default="dist" basedir=".">
<description>
Decision screen.
</description>
<property name="src" location="sources"/>
<property name="build" location="classes"/>
<property name="dist" location="dist"/>
<property name="resources" location="resources"/>
<target name="init">
<tstamp/>
<mkdir dir="${build}"/>
<mkdir dir="${dist}"/>
</target>
<target name="compile" depends="init" description="compile the source">
<!-- Compile the Java code from ${src} into ${build} -->
<javac srcdir="${src}" destdir="${build}" includeantruntime="false"/>
</target>
<target name="DecisionScreen" depends="compile" description="Run program DecisionScreen">
<!-- HERE IS THE CHANGE -->
<java classname="Decision.DecisionScreen" fork="true">
<classpath>
<pathelement path="${build}"/>
</classpath>
</java>
</target>
<target name="dist" depends="compile" description="generate the distribution">
<!-- Create the distribution directory -->
<mkdir dir="${dist}/lib"/>
<jar jarfile="${dist}/lib/Decision-${DSTAMP}.jar" basedir="${build}">
<manifest>
<attribute name="Main-Class" value="Decision.DecisionScreen"/>
</manifest>
</jar>
</target>
<target name="clean" description="clean up">
<!-- Delete the ${build} and ${dist} directory trees -->
<delete dir="${build}"/>
<delete dir="${dist}"/>
</target>
</project>
按照上面build.xml中所述设置目录结构后,可以使用以下任意一种运行已编译的类:
$ ant DecisionScreen
$ java -cp classes Decision.DecisionScreen
$ java -jar dist/lib/Decision-20200306.jar
“ java.lang.Error:无法加载apple.laf.AquaLookAndFeel”不再出现。