web-dev-qa-db-ja.com

derby.logを取り除く

Mavenプロジェクトの単体テストにApacheDerby組み込みデータベースを使用しています。残念ながら、テストを実行するたびにderby.logプロジェクトのルートにあるファイル。データベース自体はtargetディレクトリ(jdbc:derby:target/unittest-db;create=true)それは問題ではありません。 リファレンスガイド を参照した後、JDBCURLにlogDeviceパラメータを設定してみました(jdbc:derby:target/unittest-db;create=true;logDevice=/mylogs)しかし、それは別のログのようです。したがって、derby.logはまだ表示されます。

どんな助けでも大歓迎です。

あなたは取り除くことができます 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

クレジットの期限

21
stevedbrown

Derbyでは、Javaシステムプロパティ derby.stream.error.file を使用して、エラーログメッセージが書き込まれるファイルの名前を指定できます。デフォルト値は 'derbyです。 。ログ'。

Mavenのsurefireテストフェーズでderby.logを取り除くには、次のようにプラグイン構成にプロパティ定義を追加するだけです。

<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>
45

Derby.propertiesファイルに以下を含めます。

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

(または

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

windowsの場合)

8
SteveR

統合テストの場合、状況は単純な 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>

何らかの理由で、surefireソリューションのようにsystemPropertyだけでなく、propertyを使用することに注意してください。

3
Fabian

ダービーホームをtarget/derbyまたはtargetviaに設定することもできます。

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

次に、JDBC URL jdbc:derby:unittest-db;create=trueを使用します。次に、derby.logが右側のフォルダーに表示されます。

3
ramis

構成にアクセスできない場合は、接続を確立する前にこれを実行できます。

System.setProperty("derby.stream.error.field", "MyApp.DEV_NULL");
2
tashuhka

私は別の解決策を考え出しました。これを試してみてください。それは私のために働いた。ここで行っているのは、System.stream.error.fileパスを変更し、プロパティファイルの下にあるプロパティの1つに設定したことです。以下のコードを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>
2
yuvraj

これは、derby.logファイルの問題(多くの人がすでに解決方法を示しています)の解決策ではなく、提案です。テストに derby-maven-plugin を使用してみませんか? derby.logファイルをtarget/derbyの下に配置するため、ゴミが残りません。

ここでの私の答え で説明されているように、私が作成したderby-maven-pluginを介してデータベースとしてDerbyを使用でき、 GitHub およびMavenCentralから入手できます。

0
carlspring