Я создал свой первый скрипт Ant, и он работает довольно хорошо. Он компилирует все мои исходные коды Java, создает файл .jar и запускает программу даже без предупреждения.
Но когда я пытаюсь запустить мой .jar из командной строки, я получаю исключения NoClassDefFoundError.
Итак, как перевести этот фрагмент Ant для работы из командной строки?
<property name="main.class" value="de.bfs.radon.omsimulation.OMMainFrame"/>
<path id="classpath">
<fileset dir="${lib.dir}" includes="**/*.jar"/>
</path>
<target name="run" depends="jar">
<java fork="true" classname="${main.class}">
<classpath>
<path refid="classpath"/>
<path location="${bin.dir}/omsimulation-${version}.jar"/>
</classpath>
</java>
</target>
Это командная строка:
# java -classpath lib/ -jar bin/omsimulation-0.4.45-beta3.jar
Выдает:
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/toedter/calendar/JDateChooser
at de.bfs.radon.omsimulation.OMMainFrame.(OMMainFrame.java:133)
at de.bfs.radon.omsimulation.OMMainFrame$1.run(OMMainFrame.java:106)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
Почему мой файл .jar не работает с указанным путем к классам? Далее по сценарию Ant:
<target name="jar" depends="manifest">
<mkdir dir="${bin.dir}" />
<jar jarfile="${bin.dir}/omsimulation-${version}.jar" manifest="${src.dir}/omsimulation.manifest" compress="no" basedir="${build.dir}" includes="de/**" />
</target>
<target name="manifest" depends="compile">
<manifestclasspath property="manifest.cp" jarfile="${bin.dir}/omsimulation-${version}.jar">
<classpath refid="classpath" />
</manifestclasspath>
<manifest file="${src.dir}/omsimulation.manifest">
<attribute name="Built-By" value="${author}"/>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
</target>
Опять же, запуск сценария Ant работает нормально. Я даже пытался добавить указанные библиотеки в мой .jar, но это только увеличивает размер файла, проблема все еще сохраняется.
<jar jarfile="${bin.dir}/omsimulation-${version}.jar" manifest="${src.dir}/omsimulation.manifest" compress="no" basedir="${build.dir}"> <!-- includes="de/**" /-->
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</jar>
Есть идеи по этому поводу?
Большое спасибо,
donc_oe
решено : Благодаря восприятию искомая командная строка unix:
# java -cp lib/*:bin/myjarfile.jar my.package.MyMainClass
А для Windows (обратите внимание на ; точка с запятой):
# javaw -cp lib/*;bin/myjarfile.jar my.package.MyMainClass