Если у вас возникла эта проблема, убедитесь, что вы не используете Ant 1.8.1, потому что в Ant 1.8.1 есть ошибка , которая не позволяет этому работать. (Хотя это не проблема в оригинальном посте, потому что это было до выпуска Ant 1.8.1).
Ваши варианты:
- Используйте версию Ant, в которой нет ошибки (например, Ant 1.7.1).
- Явно укажите saxon9.jar в
CLASSPATH
для Ant перед его запуском:
- Установка системной
CLASSPATH
переменной среды или
- Используйте параметр командной строки
-lib
для ant
- Определите свою собственную задачу с помощью SAXON Ant (как описано в другом ответе в этой теме).
- Обходной путь, добавив
processor="org.apache.tools.ant.taskdefs.optional.TraXLiaison"
как атрибут элемента задачи xslt
.
Я бы предложил использовать вариант 1, а затем вариант 4.
Вариант 2 будет работать, но он возлагает ответственность на человека, который запускает ant, чтобы настроить свою среду и правильно запустить ant. Я предполагаю, что вы этого не хотите, поэтому пытаетесь заставить работать атрибут classpath
в задаче xslt
.
Вариант 3 имеет ограничения, поскольку SAXON Ant требует загрузки и установки JAR-файла. Также SAXON Ant не работает с SAXON 9.2 или новее (и SAXON Ant не обновлялся с момента его создания в июне 2008 года).
Теоретически, указание подэлемента factory
делает процессор XSLT, который вы хотите использовать, явным образом - чтобы предотвратить загрузчик классов от поиска другого процессора XSLT ранее при его поиске и использование его вместо вашего процессора XSLT, который является дальше вниз в CLASSPATH. На практике (по крайней мере, в муравьях 1.7.0, 1.7.1 и 1.8.0), если указан подэлемент factory
, задача xslt
игнорирует атрибут classpath
- это означает, что вы должны явно указать CLASSPATH (вариант 2). Так что это не поможет решить исходную проблему. Однако это, похоже, исправлено в исходном коде Ant, поэтому может работать в выпусках после 1.8.1.