Почему я должен использовать имя класса здесь, в ANT? - PullRequest
1 голос
/ 25 февраля 2011
 <target name="run" depends="jar">
        <java fork="true" classname="${main-class}">
          <classpath>
                <path refid="classpath"/>
                <path location="${jar.dir}/${ant.project.name}.jar"/>
        </classpath>
        </java>
    </target>

Почему я не могу использовать что-то вроде

   <java jar="build/jar/HelloWorld.jar" fork="true" >
          <classpath>
             <path refid="classpath"/>  
            <path location="${jar.dir}/${ant.project.name}.jar"/>   
  </classpath> 
   </java> 

Я получил ошибку как

 [java] java.lang.NoClassDefFoundError: org/apache/log4j/Logger
 [java]     at oata.HelloWorld.(Unknown Source)
 [java] Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger

Ответы [ 2 ]

4 голосов
/ 25 февраля 2011

В соответствии с документацией задачи java ваш второй пример должен работать как положено (за исключением того, что classpath будет игнорироваться).

Редактировать: Информация, которую вы добавили в свой вопрос, подразумевает несколько вещей:

  1. файл .jar найден
  2. в нем есть правильная запись Main-Class в манифесте
  3. ваше приложение требует log4j
  4. оно не имеет правильную Class-Path запись, указывающую на log4j.jar файл

В основном javaЗадача ant имеет те же требования, что и использование java -jar в командной строке: если ваш файл .jar работает неправильно с использованием java -jar myApp.jar в командной строке, тогда задача Ant java не будет работать так же.

Редактировать 2: Всякий раз, когда вы вызываете файл .jar непосредственно в Java, никакой дальнейший путь к классу не может быть указан каким-либо образом.Это верно, когда вы используете java -jar myApp.jar, и это также верно, когда вы используете задачу java Ant с атрибутом jar.Это означает, что сам файл .jar должен содержать правильную запись Class-Path.

1 голос
/ 25 февраля 2011

Тогда как java узнает, какое имя класса вы собираетесь запустить, если у yopu более одного основного класса, и у вас нет записи в манифесте.Используйте атрибут classname для запуска вашего основного класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...