У меня есть файл сборки, который как часть процесса сборки опирается на несколько taskdef. Эти элементы taskdef (например, webdoclet и jasper2) используют log4j в качестве регистратора. В идеале я хотел бы иметь возможность предоставить отдельный файл конфигурации log4j для каждого, но как минимум, я бы хотел указать, какой файл конфигурации log4j используется.
То, что я делал, когда-то работал, - это поместил в начало пути к классам каталог, содержащий log4j.xml, который я хотел использовать в taskdef. Например:
<target name="define.jasper2">
<path id="jspc.classpath">
<!-- Put this FIRST so Jasper will find the log4j.xml in the Build directory -->
<pathelement location="Build"/>
<fileset dir="${tomcat.libs}">
....
</fileset>
<pathelement location="${log4j.jar}"/>
....
</path>
<taskdef name="jasper2" classname="org.apache.jasper.JspC" classpathref="jspc.classpath"/>
</target>
Я убедился, что на самом деле каталог "Build" находится в начале пути к классам, и что в этом каталоге существует файл log4j.xml. Однако, когда я запускаю ant в подробном режиме с log4j в режиме отладки, я вижу, что log4j выбирает log4j.xml, который находится в текущем рабочем каталоге , а не тот, который мне нужен. Похоже, что Log4j не использует classpath для разрешения файла по умолчанию log4j.xml.
Я использую log4j 1.2.8 (встроенный в более крупный фреймворк, поэтому я не могу его обновить), и некоторые из этих задач, по-видимому, полагаются на commons-logging 1.0.3. В процессе сборки используется Sun Java 5.
Если я set ANT_OPTS=-Dlog4j.configuration=Build/log4j.xml
перед запуском ant, то taskdefs правильно загрузит нужный log4j.xml.
Помещение каталога "Build" в начало пути к классам для используемых Taskdef. Я не знаю, что изменилось. Как я могу восстановить поведение, где я могу контролировать - в build.xml - какой файл конфигурации log4j используется для данной задачи? Есть ли другой способ, кроме установки ANT_OPTS и других файлов, кроме перестановки, для перемещения файла log4j.xml приложения из текущего рабочего каталога, чтобы log4j нашел правильный файл log4j.xml?