2

log4jに次の行があります:

log4j.appender.FILE.File=${catalina.home}/logs/debug.log

IntelliJ からプロジェクトを実行すると、完全に動作します。

しかし、(Maven から) TestNG テストを実行しようとすると失敗します。

log4j:ERROR setFile(null,true) の呼び出しに失敗しました。java.io.FileNotFoundException: /logs/debug.log (そのようなファイルまたはディレクトリはありません)

パスをハードコードすることができ、すべてがうまくいきます。しかし、${catalina.home} が別の場所にあるさまざまなシステムに展開できるため、そのソリューションは必要ありません。

Mac で開発し、freebsd と centos にデプロイします。Tomcat は常にさまざまな場所にあります。/var/log/myapp.log を使用できますが...

ログ ファイル パスを使用して共通変数 (IntelliJ および Maven テストの実行時に使用可能) を定義する方法はありますか?

4

3 に答える 3

3

Maven Surefire Plugin:Using System Propertiesと一緒に、存在しない場合にアクティブ化されるMaven プロファイルを使用してみてください。${env.catalina.home}

<profile>
   <id>mock-catalina-home</id>
   <activation>
      <property>
         <name>!env.catalina.home</name>
      </property>
   </activation>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.14</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <systemProperties>
                        <property>
                            <name>catalina.home</name>
                            <value>PATH_TO_CATALINA_HOME</value>
                        </property>
                    </systemProperties>
                </configuration>
            </plugin>
        </plugins>
    </build>
</profile>

Maven プロパティPATH_TO_CATALINA_HOMEからも参照できることに注意してください。例えば

<systemProperties>
    <property>
        <name>PATH_TO_CATALINA_HOME</name>
        <value>${my.dev.catalina.home}</value>
    </property>
</systemProperties>

これは、 をさまざまな値に定義するのに役立ち${my.dev.catalina.home}ます。

これが役立つことを願っています。

于 2013-04-05T01:35:34.487 に答える
2

maven からテストを実行するときに log4j プロパティ ファイルが ${catalina.home} の正しい値を取得するには、maven によってフィルタリングされたファイルにある必要があります (src/main/resources は、そのようなファイルのディレクトリです)。 )。また、maven で変数「catalina.home」を設定する必要があります。環境変数を使用する変数 AKA maven プロパティを作成できるため、各マシンに tomcat をインストールするための異なる場所を定義できます。

<properties>
  <catalina.home>${env.catalina.home}</catalina.home>
<properties> 
于 2013-04-04T23:09:01.513 に答える