3

我必须构建包含所有依赖项和 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> 

为了让 jar 包含所有依赖项和 log4j.properties 文件,我需要做什么?

4

5 回答 5

2

不捆绑日志文件是正常的,因为您的用户可能希望单独/外部配置它。我在资源文件夹中构建了一个包含一个主类和 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!
于 2013-02-21T13:34:20.573 回答
1

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

于 2013-02-21T13:21:45.437 回答
0

只需将您log4j.properties放在src/main/resources/META-INF.

于 2013-02-21T14:39:57.327 回答
0

我的问题与 pom 中资源标签中的 targetPath 元素和 a 相关:

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

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

于 2013-02-22T09:27:58.550 回答
0

如果您将 log4j.properties 文件放入

src/main/resources/log4j.properties

然后在 Maven 构建过程中,它会自动放置到正确的位置。看,这是我的 jar 文件的视图。

在此处输入图像描述

于 2019-07-16T18:20:27.923 回答