默认 JavaFX maven 项目:slf4j 不工作

Default JavaFX maven project: slf4j not working

几个月前,我使用 Netbeans 创建了一个 JavaFX Maven 项目。直到昨天,我一直在使用 log4j 作为记录器(效果很好)。由于我的项目将与使用 slf4j 的其他项目一起使用,我决定更改我的记录器。

不幸的是,创建的 .jar 不包含我的 log4j.properties 文件,而是一个通用文件。如果我用我自己的版本手动替换它,日志记录会正常工作。

如何告诉 maven 包含我的 log4j.properties 文件?根据网上的一些解释,它应该是 src/main/resources/ 但这并不能解决问题。

pom.xmlbuilddependencies 部分:

建设

<build>
  <plugins>

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-dependency-plugin</artifactId>
      <version>2.6</version>
      <executions>
        <execution>
          <id>unpack-dependencies</id>
          <phase>package</phase>
          <goals>
            <goal>unpack-dependencies</goal>
          </goals>
          <configuration>
            <excludeScope>system</excludeScope>
            <excludeGroupIds>junit,org.mockito,org.hamcrest</excludeGroupIds>
            <outputDirectory>${project.build.directory}/classes</outputDirectory>
          </configuration>
        </execution>
      </executions>
    </plugin>

    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <version>1.2.1</version>
      <executions>
        <execution>
          <id>unpack-dependencies</id>

          <phase>package</phase>
          <goals>
            <goal>exec</goal>
          </goals>
          <configuration>
            <executable>${java.home}/../bin/javafxpackager</executable>
            <arguments>
              <argument>-createjar</argument>
              <argument>-nocss2bin</argument>
              <argument>-appclass</argument>
              <argument>${mainClass}</argument>
              <argument>-srcdir</argument>
              <argument>${project.build.directory}/classes</argument>
              <argument>-outdir</argument>
              <argument>${project.build.directory}</argument>
              <argument>-outfile</argument>
              <argument>${project.build.finalName}.jar</argument>
            </arguments>
          </configuration>
        </execution>
        <execution>
          <id>default-cli</id>
          <goals>
            <goal>exec</goal>
          </goals>
          <configuration>
            <executable>${java.home}/bin/java</executable>
            <commandlineArgs>${runfx.args}</commandlineArgs>
          </configuration>
        </execution>
      </executions>
    </plugin>

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.1</version>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <compilerArguments>
          <bootclasspath>${sun.boot.class.path}${path.separator}${java.home}/lib/jfxrt.jar</bootclasspath>
        </compilerArguments>
      </configuration>
    </plugin>

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.16</version>
      <configuration>
        <additionalClasspathElements>
          <additionalClasspathElement>${java.home}/lib/jfxrt.jar</additionalClasspathElement>
        </additionalClasspathElements>
      </configuration>
    </plugin>

  </plugins>
</build>

依赖关系

<dependencies>

  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.19</version>
    <type>jar</type>
  </dependency>

  <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
    <type>jar</type>
  </dependency>

  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.19</version>
    <type>jar</type>
  </dependency>

  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
  </dependency>

  <dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-core</artifactId>
    <version>1.3</version>
    <scope>test</scope>
  </dependency>

</dependencies>

我只需要将以下内容添加到我的主要 class:

import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.BasicConfigurator;

/* ... */

public void mainMethod() {

    /* ... */

    /* initialize log4j */
    BasicConfigurator.configure();
    PropertyConfigurator
        .configure("src/main/resources/log4j.properties");

    /* ... */

}