包含所有依赖项的maven jar和log4j.properties文件

时间:2013-02-21 12:29:24

标签: java maven log4j

我必须使用所有依赖项和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文件,我该怎么做?

5 个答案:

答案 0 :(得分:2)

不捆绑日志文件是正常的,因为您的用户可能希望单独/外部配置它。我已经在resources文件夹中构建了一个带有一个主类和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 /主/ 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!

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

如果将log4j.properties文件放入

src/main/resources/log4j.properties

然后在进行Maven构建期间,它将自动放置在正确的位置 看,这是我的jar文件的视图。

enter image description here