Как указать ant для сборки с использованием определенного исполняемого файла javac? - PullRequest
14 голосов
/ 20 октября 2011

Как я могу сказать ant использовать определенный исполняемый файл javac из командной строки?

У меня есть инсталляция gcj, собранная как часть gcc, внутри библиотеки, которую мы распространяем, и я быхотел бы иметь конкретную часть программного обеспечения Java, построенную против этого.Тем не менее, он просто использует system-gcc, и такие параметры, как -Dbuild.compiler, похоже, хотят, чтобы я указывал какой-то класс Java, а не путь к файлу.

Я надеялся на что-то подобноев CC в Makefiles.

Я уверен, что это что-то действительно простое, и я просто тупой.


Чтобы быть ясным, я хотел бы избежать редактирования сборкиподать себя, если это возможно.Нет ли какого-то стандартного способа просто указать компилятор в командной строке для ant?Я не против предположения, что файл сборки в некотором смысле «хорошо себя ведет».

Ответы [ 4 ]

21 голосов
/ 20 октября 2011

Если вы используете Ant 1.6 или выше, вы можете установить атрибут javac fork="yes". Это дает вам возможность указать путь к вашему исполняемому файлу при использовании jikes, jvc, gcj, sj или любой другой версии javac, которую вы используете.

  <javac srcdir="${src}"
         destdir="${build}"
         fork="yes"
         executable="/opt/java/jdk1.1/bin/javac"
         compiler="javac1.1"
  />
8 голосов
/ 20 октября 2011

Аргумент -D при вызове ant будет использовать свойство из командной строки внутри скрипта Ant.Форма, в которой он используется:

ant -Dmyvar=true

Где myvar - это имя свойства, а true - это значение, которое вы хотите использовать в своем скрипте.

Самый простой способ - использовать свойство для исполняемых атрибутов javac.

 <target name="compile">  
   <javac srcdir="${src}"
     destdir="${build}"
     fork="${fork}"
     executable="${javac.executable}"
     compiler="${compiler}"/>  
 </target>

и затем в командной строке вы можете вызвать:

ant compile -Djavac.executable=/usr/bin/local/jdk/javac -Dsrc=/home/src -Dbuild=/home/build -Dcompiler=javac1.6 -Dfork=true
2 голосов
/ 20 октября 2011

Со страницы задачи javac :

Можно использовать разные компиляторы.Это можно указать либо установив глобальное свойство build.compiler, которое повлияет на все задачи во время сборки, либо установив атрибут компилятора, специфичный для текущей задачи, либо используя вложенный элемент любого типа typedeffed или componentdeffed, который реализует org.apache.tools.ant.taskdefs.compilers.CompilerAdapter.Допустимые значения для свойства build.compiler или атрибута компилятора:

  • classic (стандартный компилятор JDK 1.1 / 1.2) - в качестве псевдонимов могут использоваться javac1.1 и javac1.2,
  • modern (стандартный компилятор JDK 1.3 / 1.4 / 1.5 / 1.6 / 1.7) - javac1.3 и javac1.4 и javac1.5 и javac1.6 и javac1.7 (начиная с Ant 1.8.2) можно использовать как псевдонимы.
  • jikes (компилятор Jikes).
  • jvc (компилятор командной строки из Microsoft SDK для Java / Visual J ++) - в качестве псевдонима можно использовать Microsoft.
  • kjc (компилятор kopi).
  • gcj (компилятор gcj из gcc).
  • sj (Java-компилятор Symantec) - в качестве псевдонима можно использовать symantec.
  • extJavac (запускать современный или классический в собственной JVM).

Как я читаю, вам нужно написать класс, который реализует CompilerAdapter и использует ваш компилятор.Затем введите эту задачу и используйте ее в атрибуте компилятора javac.

0 голосов
/ 20 октября 2011

Я уже делал что-то похожее, используя задачу Ant Exec. Смотри http://ant.apache.org/manual/Tasks/exec.html

Позволяет вызывать определенную системную команду. В нашем случае нам нужно было вызвать Delphi (не спрашивать), чтобы создать несколько DLL для конкретного проекта. Команда exec также позволит вам вызывать gcj вместо javac.

...