2012-01-02 2 views
0

У меня небольшие проблемы с моей первой сборкой муравьев в eclipse, вот мой файл build.xml build.xml.Java - Ant build (Eclipse) - Не удалось найти основной класс: nat.rutherford.DesktopStarter

<project name="Rutherford" default="dist" basedir="."> 
    <description> 
     simple example build file 
    </description> 
    <!-- set global properties for this build --> 
    <property name="src" location="src"/> 
    <property name="build" location="build"/> 
    <property name="dist" location="dist"/> 
    <property name="libs" value="libs"/> 

    <path id="classpath"> 
     <fileset dir="${libs}" includes="**/*.jar"/> 
    </path> 

    <target name="init"> 
     <!-- Create the time stamp --> 
     <tstamp/> 
     <!-- Create the build directory structure used by compile --> 
     <mkdir dir="${build}"/> 
    </target> 

    <target name="compile" depends="init" 
     description="compile the source " > 
     <!-- Compile the java code from ${src} into ${build} --> 
     <javac srcdir="${src}" destdir="${build}" classpathref="classpath"> 
      <compilerarg line="-encoding utf-8"/> 
     </javac> 
    </target> 

    <target name="dist" depends="compile" 
     description="generate the distribution" > 
     <!-- Create the distribution directory --> 
     <mkdir dir="${dist}/lib"/> 

     <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file --> 
     <jar jarfile="${dist}/MyProject-${DSTAMP}.jar" basedir="${build}"> 
      <manifest> 
       <attribute name="Main-Class" value="nat.rutherford.DesktopStarter"/> 
      </manifest> 
     </jar> 
    </target> 

    <target name="run"> 
     <java jar="${dist}/MyProject-${DSTAMP}.jar" fork="true"/> 
    </target> 

    <target name="clean" 
     description="clean up" > 
     <!-- Delete the ${build} and ${dist} directory trees --> 
     <delete dir="${build}"/> 
     <delete dir="${dist}"/> 
    </target> 
</project> 

Он компилирует нормально без каких-либо предупреждений или ошибок, но когда я пытаюсь запустить .jar он говорит, «Не удалось найти основной класс: nat.rutherford.DesktopStarter. Программа теперь выход = (

Я прочитал тонну страниц по этому вопросу, но до сих пор ничего убедительного

я смог скомпилировать его с помощью Eclipse, -.> Файл -> Экспорт -> Java -> Runnable Jar File. Но я использую некоторые файлы с кодировкой UTF-8 .txt, которые, похоже, не могут справиться с этим, и я нуждаюсь в них, т.е. у меня есть греческие символы, которые должны читать ... dσ/dΩ ... но в настоящее время читается ... dÃ/d © ... который не собирается работать ^^

Так что в основном мне нужно сделать работу над Ant, не забывая, что она должна иметь возможность обрабатывать мои UTF- 8 также закодированных файлов .txt.

+0

Этот класс существует? –

ответ

4

Проблема в вашей задаче dist, когда вы создаете свою банку. Если ваша сборка правильная, и нет проблем при упаковке вашей банки. Вещи, которые не так:

  • <mkdir dir="${dist}/lib"/> -> это не среднее, вы не используете его никогда

  • секунду вы не включая ваши библиотеки в вашем банке, а затем, когда вы попытайтесь выполнить свою банку, это не работает, поэтому вы видите сообщение об ошибке Не удалось найти основной класс: nat.rutherford.DesktopStarter. Программа теперь выйдет Вы могли видеть, что ваши библиотеки не находятся в вашей банке, используя Winzip или подобное. Я полагаю, что вы видите свою проблему, когда пытаетесь выполнить банку напрямую, используя окна или аналогичные. Хороший способ узнать, что происходит, видя проблему напечатанный в консоли выполняющийся ваш баночку следующим способом: java -jar MyProject-20120102.jar

  • См: How to include your libraries in you jar?

  • И если вы хотите узнать больше о банке упаковки с использованием ant try this.

  • Другое дело, что вам нужно изменить класса путь атрибут в вашем манифеста включить библиотеки в вашем $ {ЛИЭС} папку.

+0

@oers Я видела свою ошибку и редактировала свой ответ – jenaiz

+0

@jenaiz Я не уверен, что понимаю, что вы имеете в виду. Все файлы .class существуют в каталоге сборки в тех местах, где они должны. Я не вижу, что вы делаете по-другому для меня. – Neilos

+0

Если вы скомпилируете без проблем и ваши классы находятся в папке ** {build} **, тогда проблема должна быть в коде, когда вы упаковываете свою банку. Потому что там вы говорите, какие у вас основаны (каталог от места до jar), какие библиотеки вы включаете (в этом случае не включены библиотеки) ... и вы создаете манифест с помощью класса Main: nat.rutherford.DesktopStarter – jenaiz

0

Похоже, вы добавили манифест в исполняемый JAR, который гласит nat.rutherford.DesktopStarter как ваш основной класс.

Я рекомендую вам открыть JAR и убедиться, что manifest.mf появился и действительно говорит, что делает ваш Ant build.xml.

Я также подтвердил, что ваш DesktopStarted.class появляется в папке с адресом nat.rutherford. Если этого не произойдет, JVM не найдет его.

+0

Я проверил манифест, используя тестовый класс, чтобы прочитать его из JAR, он печатает основные атрибуты, выход; - Ant-Version: Apache Ant 1.7.1 - Manifest-Version: 1.0 - Создано: 20.4-b02 (Sun Microsystems Inc.) - Main-Class: nat.rutherford.DesktopStarter – Neilos

+0

JAR не содержит файл с именем DesktopStart.class в пути nat/rutherford – duffymo

+0

Да, похоже, это так, но я не знаю Я не знаю, что я делаю неправильно, потому что это не так. Насколько я могу судить, он должен быть там?!? Файлы .class существуют в папке «build», это - то, откуда я JAR, и я создаю манифест правильно, так что я не хватает? Это мой первый сборник, так что это может быть что-то элементарное, которого я не вижу. – Neilos

Смежные вопросы