首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >多模块Maven项目中的log4j配置文件

多模块Maven项目中的log4j配置文件
EN

Stack Overflow用户
提问于 2010-11-12 09:02:34
回答 3查看 17K关注 0票数 18

我正在从事一个多模块Maven项目,其结构如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
war-module
jar-module

war-模块依赖于jar -模块,并在打包后将jar工件添加到webapp的lib目录中。

war模块和jar模块都使用Apache log4j进行日志记录,并共享当前位于jar模块项目中的相同log4j配置文件(log4j.xml)。这个log4j.xml将被打包到jar-module.jar文件中,但是,我想将它打包到war包中的WEB/classes目录中,而不是jar文件中,这样用户就可以很容易地找到这个配置文件,并在必要时修改它(如果这个文件位于WEB/lib/jar-module.jar中,那么很难找到它,因为该目录下还有很多其他jar)。

我的问题是: Maven解决这个问题的方法是什么?

更新:

我真正的项目要复杂一些,而且还有一个ear模块,它也依赖于jar模块(又名jar模块)。jar-模块可以在几个不同的项目中独立使用,我不能仅仅将文件放入war-module/src/main/resources目录来解决这个问题)。我不想在几个项目之间复制一些配置文件,比如log4j.xml (和其他配置文件,比如myapp.properties)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-15 07:00:28

我通过网上更多的搜索找到了答案。

通常,在多模块Maven项目中有三种共享资源的方法:

maven-remote-resources-plugin

  • 剪切并粘贴它们。
  • 使用程序集,依赖项插件
  • 使用

以下是Maven背后的Sonatype公司发布的一篇关于在Maven中跨项目共享资源的博客文章,这正是我需要的确切答案:

http://www.sonatype.com/people/2008/04/how-to-share-resources-across-projects-in-maven/

票数 11
EN

Stack Overflow用户

发布于 2010-11-12 09:46:53

在jar模块中,将文件排除在jar中:

代码语言:javascript
代码运行次数:0
运行
复制
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.3.1</version>
    <configuration>
      <excludes>
        <exclude>log4j.xml</exclude>
      </excludes>
    </configuration>
</plugin>

使用buildhelper将log4j.xml作为单独的工件附加到构建

代码语言:javascript
代码运行次数:0
运行
复制
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.5</version>
    <executions>
      <execution>
        <id>attach-artifacts</id>
        <phase>package</phase>
        <goals>
          <goal>attach-artifact</goal>
        </goals>
        <configuration>
          <artifacts>
            <artifact>
              <file>${project.build.outputDirectory}/log4j.xml</file>
              <type>xml</type>
              <classifier>log4j</classifier>
            </artifact>
          </artifacts>
        </configuration>
      </execution>
    </executions>
</plugin>

现在,在war工件中,将xml复制到输出目录:

代码语言:javascript
代码运行次数:0
运行
复制
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
      <execution>
        <id>copy</id>
        <phase>prepare-package</phase>
        <goals>
          <goal>copy</goal>
        </goals>
        <configuration>
          <artifactItems>
            <artifactItem>
              <groupId>${project.groupId}</groupId>
              <artifactId>your.jar.project.artifactId</artifactId>
              <version>${project.version}</version>
              <type>xml</type>
              <classifier>log4j</classifier>
              <outputDirectory>${project.build.outputDirectory}
              </outputDirectory>
              <destFileName>log4j.xml</destFileName>
            </artifactItem>
          </artifactItems>
        </configuration>
      </execution>
    </executions>
</plugin>

当然,将文件放在web-工件/src/main/resources中会更容易:-)

票数 7
EN

Stack Overflow用户

发布于 2014-09-11 06:33:20

根据我的经验,这可以以一种简单的方式实现,只是:

  1. 在父模块上创建log4j配置资源。
  2. 调用所有pom模块中log4j的依赖关系。

详细步骤:

  1. 在src/main/

文件夹中创建一个具有公共配置

  1. 的项目,将log4j或logback配置文件
  2. 安装在本地Maven存储库中,供其他项目
  3. 使用,在后续项目

G 215中将依赖项添加为普通的Maven依赖项。

代码语言:javascript
代码运行次数:0
运行
复制
<dependency> 
  <groupId>com.your.group.id</groupId> 
  <artifactId>common-config</artifactId> 
  <scope>provided</scope> 
</dependency>

我更喜欢使用提供的作用域,并在运行时从类路径配置文件夹中提供文件。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4162992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档