我正在从事一个多模块Maven项目,其结构如下所示:
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)。
发布于 2010-11-14 23: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/
发布于 2010-11-12 01:46:53
在jar模块中,将文件排除在jar中:
<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作为单独的工件附加到构建
<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复制到输出目录:
<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中会更容易:-)
发布于 2014-09-10 22:33:20
根据我的经验,这可以以一种简单的方式实现,只是:
。
详细步骤:
文件夹中创建一个具有公共配置
G 215
中将依赖项添加为普通的Maven依赖项。
<dependency>
<groupId>com.your.group.id</groupId>
<artifactId>common-config</artifactId>
<scope>provided</scope>
</dependency>
我更喜欢使用提供的作用域,并在运行时从类路径配置文件夹中提供文件。
https://stackoverflow.com/questions/4162992
复制相似问题