Избавляемся от derby.log - PullRequest
26 голосов
/ 17 июня 2009

Я использую встроенную базу данных Apache Derby для модульного тестирования в проекте Maven. К сожалению, когда я запускаю тест, я получаю файл derby.log в корне проекта. Сама база данных создается в каталоге target (jdbc:derby:target/unittest-db;create=true), так что это не проблема. После обращения к справочному руководству я попытался установить параметр logDevice в URL JDBC (jdbc:derby:target/unittest-db;create=true;logDevice=/mylogs), но, похоже, это для другого журнала, поэтому derby.log по-прежнему отображается.

Любая помощь очень ценится.

Ответы [ 8 ]

45 голосов
/ 19 декабря 2009

Derby позволяет вам указать имя файла, в который записываются сообщения журнала ошибок, используя системное свойство Java derby.stream.error.file. Значением по умолчанию является derby.log.

Чтобы избавиться от derby.log на этапе тестирования Maven верный, я просто добавляю определение свойства в конфигурацию плагина следующим образом:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <systemProperties>
            <property>
                <name>derby.stream.error.file</name>
                <value>target/derby.log</value>
            </property>
        </systemProperties>
    </configuration>
</plugin>
21 голосов
/ 17 июня 2009

Вы можете избавиться от файла derby.log, создав следующий класс

public class DerbyUtil {
    public static final OutputStream DEV_NULL = new OutputStream() {
        public void write(int b) {}
    };
}

и настройку системного свойства JVM derby.stream.error.field, например, используя следующий аргумент командной строки JVM:

-Dderby.stream.error.field=DerbyUtil.DEV_NULL

Кредит, которому он причитается.

8 голосов
/ 02 августа 2012

Включите в файл derby.properties следующее:

derby.stream.error.file=/dev/null

(или

derby.stream.error.file=\\Device\\Null

в Windows)

3 голосов
/ 27 июля 2016

Вы также можете просто установить derby home на target/derby или target с помощью:

System.setProperty("derby.system.home", new File("target/derby").getAbsolutePath());

и затем используйте URL JDBC jdbc:derby:unittest-db;create=true. Затем в правой папке появится файл derby.log.

3 голосов
/ 25 мая 2014

Для интеграционных тестов ситуация может быть немного сложнее, чем простое свойство surefire . Указание свойства derby.stream.error.file в maven-failsafe-plugin не будет работать, поскольку среда сервера не наследуется от этого плагина (очевидно, использование maven-surefire-plugin не делает различий).

Вместо этого вам нужно изменить реальный плагин запуска сервера. Следующий пример для maven-jetty-plugin:

<plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <configuration>
        <systemProperties>
            <!-- Get rid of that missplaced derby.log. -->
            <systemProperty>
                <name>derby.stream.error.file</name>
                <value>${project.build.directory}/derby.log</value>
            </systemProperty>
        </systemProperties>
    </configuration>
</plugin>

Обратите внимание, что по какой-то причине мы используем systemProperty, а не просто property, как в верном решении.

2 голосов
/ 31 августа 2015

Если у вас нет доступа к конфигурации, вы можете выполнить это перед установлением соединения:

System.setProperty("derby.stream.error.field", "MyApp.DEV_NULL");
2 голосов
/ 06 июля 2010

Я придумал другое решение. Попробуйте это; это сработало для меня. Здесь я изменил путь System.stream.error.file и установил для него одно из свойств, представленных в моем файле свойств. Просто добавьте приведенный ниже код в файл applicationContext.xml.

<bean id="setDerbyLog" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
  <property name="targetClass"><value>java.lang.System</value></property>
  <property name="targetMethod"><value>setProperty</value></property>
  <property name="arguments">
    <list>
      <value>derby.stream.error.file</value>
      <value>${derby.stream.error.file}</value>
    </list>
  </property>
</bean>
0 голосов
/ 07 декабря 2015

Это не решение вашей проблемы с derby.log файлом (которую многие люди уже показали, как решить), а скорее предложение. Почему бы не использовать derby-maven-plugin для своих тестов? Он помещает файл derby.log в target/derby, поэтому не оставляет мусора.

Как описано в моем ответе , вы можете использовать Derby в качестве базы данных с помощью плагина derby-maven-plugin, который я написал и который доступен на GitHub и через Maven Central.

...