だから、私は興味深い問題を抱えています:
含まれているANTビルドファイルを介してJARを正常に実行できます。それは実行され、出力、およびあらゆる種類のグルーヴィーなものを表示します。さて、これと同じJARファイルをコマンドラインから実行しようとすると、java -jar JARFile.jar
それが鳴り響きます。を与えますNullPointerException
。楽しいですよね?
問題のあるコード行が続きます。具体的には3行目です。
File dir = new File("media/bgs/");
children = dir.list();
int num = (((int) (Math.random()*children.length)));
String choice = children[num];
media/bgs
このコードは、jarファイルとクラスパスにあるファイルからランダムな背景画像を選択します。
注意:このビルドスクリプトは過去に実行可能なJARを作成しましたが、現在、これらのJARはANTビルドファイルを介して実行されます。
考え?
ANTビルドファイル
<property name="dir.src" value="src" />
<property name="dir.build" value="build" />
<property name="dir.data" value="data" />
<property name="dir.media" value="media" />
<property name="dir.lib" value="lib" />
<property name="dir.dist" value="dist" />
<property name="name.jar" value="EmpView2.jar" />
<property name="jarpath" value="${dir.dist}/${name.jar}" />
<property file="data/build_info.properties" />
<property name="build.number" value="${build.major.number}.${build.minor.number}.${build.revision.number}" />
<path id="build-classpath">
<pathelement location="${dir.dist}/${name.jar}" />
<fileset dir="${dir.lib}" includes="**/*.jar" />
<fileset dir="${dir.src}" includes="**/*.jar" />
<fileset dir="${dir.data}" includes="**/*" />
<fileset dir="${dir.media}" includes="**/*" />
</path>
<target name="current-number">
<echo>Current build number:${build.number}</echo>
</target>
<target name="dist">
<antcall target="minor">
</antcall>
</target>
<target name="major">
<propertyfile file="data/build_info.properties">
<entry key="build.major.number" type="int" operation="+" value="1" pattern="00" />
<entry key="build.minor.number" type="int" value="0" pattern="00" />
<entry key="build.revision.number" type="int" value="0" pattern="00000" />
</propertyfile>
</target>
<target name="minor">
<propertyfile file="data/build_info.properties">
<entry key="build.minor.number" type="int" operation="+" value="1" pattern="00" />
<entry key="build.revision.number" type="int" value="0" pattern="00000" />
</propertyfile>
</target>
<target name="revision">
<propertyfile file="data/build_info.properties">
<entry key="build.revision.number" type="int" operation="+" value="1" pattern="00000" />
</propertyfile>
</target>
<target name="all">
<propertyfile file="data/build_info.properties">
<entry key="build.major.number" type="int" operation="+" value="1" pattern="00" />
<entry key="build.minor.number" type="int" operation="+" value="1" pattern="00" />
<entry key="build.revision.number" type="int" operation="+" value="1" pattern="00000" />
</propertyfile>
</target>
<target name="clean">
<delete dir="${dir.build}" failonerror="false" />
<delete dir="${dir.dist}" failonerror="false" />
</target>
<target name="prepare">
<mkdir dir="${dir.build}" />
<mkdir dir="${dir.dist}" />
</target>
<target name="compile" depends="prepare">
<depend srcDir="${dir.build}" closure="true" />
<!-- Capture the path as a delimited property using the refid attribute -->
<property name="myclasspath" refid="build-classpath" />
<!-- Emit the property to the ant console -->
<echo message="Classpath = ${myclasspath}" />
<javac srcdir="${dir.src}" destdir="${dir.build}" classpathref="build-classpath" debug="on" includeantruntime="true" />
<unzip dest="${dir.build}">
<fileset dir="${dir.lib}" includes="**/*.zip" />
<fileset dir="${dir.lib}" includes="**/*.jar" />
</unzip>
</target>
<target name="jar" depends="compile">
<manifestclasspath property="lib.list" jarfile="${dir.dist}/${name.jar}">
<classpath refid="build-classpath" />
</manifestclasspath>
<antcall target="revision" />
<jar destfile="${jarpath}" basedir="." includes="${dir.lib}/*" filesetmanifest="mergewithoutmain">
<manifest>
<attribute name="Main-Class" value="com.baesystems.ev2.EmpowerView" />
<attribute name="Class-Path" value="${lib.list}" />
</manifest>
<fileset dir="${dir.build}" includes="**/*" excludes="META-INF/*.SF" />
<fileset dir="." includes="${dir.media}/**/*" />
<fileset dir="." includes="${dir.data}/*" />
</jar>
<chmod file="${dir.dist}/${name.jar}" perm="+x" />
</target>
<target name="run">
<echo message="Attempting to run!" />
<java jar="${jarpath}" fork="true" />
<echo message="JAR launched." />
</target>
<target name="compile-jar-run">
<antcall target="jar" />
<antcall target="run" />
</target>
<target name="clean-compile-jar-run">
<antcall target="clean" />
<antcall target="compile-jar-run" />
</target>