【问题标题】:Maven jar with all dependencies and log4j.properties file具有所有依赖项和 log4j.properties 文件的 Maven jar
【发布时间】:2013-02-21 12:29:24
【问题描述】:

我必须构建包含所有依赖项和 log4j.properties 文件的 jar 文件。

我在 stackoverflow 上寻找答案,但没有运气。

现在我正在构建包含所有依赖项的 jar,但我现在不知道如何告诉 maven 将 log4j.properties 文件移动到 ma *.jar 文件中的 META-INF 目录。

我的 pom 的一部分,它生成带有依赖项的 jar:

                    <plugin>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <executions>
                            <execution>
                                <phase>install</phase>
                                <goals>
                                    <goal>single</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <archive>
                                <manifest>
                                    <mainClass>MainClass</mainClass>
                                </manifest>
                            </archive>
                            <descriptorRefs>
                                <descriptorRef>jar-with-dependencies</descriptorRef>
                            </descriptorRefs>
                        </configuration>
                    </plugin> 

我必须做什么才能拥有包含所有依赖项和 log4j.properties 文件的 jar?

【问题讨论】:

  • 文件在您当前项目结构中的位置?
  • log4j.properties 在 src/main/resources

标签: java maven log4j


【解决方案1】:

不捆绑日志文件是正常的,因为您的用户可能希望单独/外部配置它。我在资源文件夹中构建了一个包含一个主类和 log4j 的简单项目,它可以在 Netbeans 中运行。

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.mycompany</groupId>
  <artifactId>log4j-sample</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>log4j-sample</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
  </dependencies>
</project>

src/main/com/mycompany/log4jsample/App.java

package com.mycompany.log4jsample;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

/**
 * Hello world!
 *
 */
public class App {
    private static Logger logger = LogManager.getLogger("HelloWorld");

    public static void main(String[] args) {
        logger.info("Hello, World!");
    }
}

/src/main/resources/log4j.properties

# To change this template, choose Tools | Templates
# and open the template in the editor.

log4j.rootLogger=DEBUG, CONSOLE
#log4j.rootLogger=INFO, FILE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.err
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p - %m%n

输出

2013-02-22 00:27:39,518 INFO  - Hello, World!

【讨论】:

    【解决方案2】:

    您可以使用Maven Antrun Plugin 编写一个将在maven 生命周期阶段执行的ant 脚本。

    【讨论】:

      【解决方案3】:

      只需将您的log4j.properties 放在src/main/resources/META-INF 下即可。

      【讨论】:

        【解决方案4】:

        我的问题是连接到 pom 中资源标签中的 targetPath 元素和:

            <resources>
                <resource>
                    <targetPath>${project.build.directory}/</targetPath>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>*.properties</include>
                    </includes>
                </resource>
            </resources>
        

        我所要做的就是删除这个 targetPath 元素。感谢您抽出宝贵时间,很抱歉没有粘贴所有内容。

        【讨论】:

          【解决方案5】:

          如果您将 log4j.properties 文件放入

          src/main/resources/log4j.properties
          

          然后在 maven 构建期间它会自动放置到正确的位置 看,这是我的 jar 文件的视图。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-05-02
            • 2021-05-25
            • 2014-09-02
            • 1970-01-01
            • 2018-11-16
            • 2014-06-08
            • 2015-07-12
            • 1970-01-01
            相关资源
            最近更新 更多