繁体   English   中英

在依赖项目中包含来自 JAR 的文件

[英]Include files from a JAR in a dependent project

我想跨多个项目同步 log4j 和 logback 配置文件。 我有一个项目(项目 A),其中包含 log4j 和 logback 依赖项以及配置文件。

项目A

  • 源代码/测试/资源
    • log4j2.xml
    • logback-test.xml

项目 B 依赖于项目 A。我想在项目 A 的 JAR 中包含日志配置文件,并在解决项目 B 的 Maven 依赖项时将它们自动放入项目 B 的特定目标文件夹中。

我在项目 A 中尝试过maven-jar-plugin ,但它似乎不适合我的目的。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.2.2</version>
    <configuration>
        <includes>
            <include>src/test/resources/log4j2.xml</include>
            <include>src/test/resources/logback-test.xml</include>
        </includes>
    </configuration>
</plugin>

任何帮助,将不胜感激。

谢谢!

更新:

虽然接受了 Eugene 的回答,但我需要添加一个<resources>条目,以便日志配置文件将包含在打包的 JAR 中。

<build>
    <resources>
        <resource>
            <directory>src/test/resources</directory>
            <includes>
                <include>log4j2.xml</include>
                <include>logback-test.xml</include>
            </includes>
        </resource>
    </resources>
</build>

从项目 A 执行mvn clean compile assembly:single deploy创建并部署了包含日志文件的 JAR。

[INFO] --- maven-remote-resources-plugin:1.7.0:bundle (default) @ project-a ---
[INFO] Writing META-INF/maven/remote-resources.xml descriptor with 2 entries

从项目 B 执行mvn clean compile将文件复制到 output 目录中

[INFO] --- maven-remote-resources-plugin:1.7.0:process (default) @ project-b ---
[INFO] Preparing remote bundle com.my.projects:project-a:1.0-SNAPSHOT
[INFO] Copying 2 resources from 1 bundle.

您可以使用Apache Maven 远程资源插件

该插件用于从远程存储库中检索 JARs 资源,处理这些资源,并将它们合并到您使用 Maven 构建的 JARs 中。

一个非常常见的用例是需要在整个组织中以一致的方式使用某些资源 package。 例如在 Apache,要求每一个 JAR 产生一个 Apache 许可证的副本和一个引用给定项目中所有使用软件的通知文件

  1. 在项目 A 中定义要共享的资源或更好地为共享资源创建单独的项目
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-remote-resources-plugin</artifactId>
                <version>1.7.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>bundle</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <resourcesDirectory>src/test/resources/</resourcesDirectory>
                    <includes>
                        <include>log4j2.xml</include>
                        <include>logback-test.xml</include>
                      </includes>
                </configuration>
            </plugin>
        </plugins>
    </build>

Maven 将创建用于共享资源的资源包文件${basedir}/target/classes/META-INF/maven/remote-resources.xml

<remoteResourcesBundle xsi:schemaLocation="http://maven.apache.org/remote-resources/1.1.0 https://maven.apache.org/xsd/remote-resources-1.1.0.xsd"
    xmlns="http://maven.apache.org/remote-resources/1.1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <remoteResources>
    <remoteResource>log4j2.xml</remoteResource>
    <remoteResource>logback-test.xml</remoteResource>
  </remoteResources>
  <sourceEncoding>UTF-8</sourceEncoding>
</remoteResourcesBundle>

请参阅文档

  1. 配置其他模块以使用共享资源
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-remote-resources-plugin</artifactId>
                <version>1.7.0</version>
                <configuration>
                    <outputDirectory>[your output directory]</outputDirectory>
                    <resourceBundles>
                        <!--The resource bundles that will be retrieved and processed. For example: org.test:shared-resources:${project.version}-->
                        <resourceBundle>groupId:artifactId:version[:type[:classifier]]</resourceBundle> 
                    </resourceBundles>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>process</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

请参阅文档

替代解决方案:
Apache Maven 依赖插件它可以将工件从本地或远程存储库复制和/或解压缩到指定位置。
那里描述了Maven:在测试之前提取依赖资源并且使用依赖资源?

更新:
示例如何添加资源:

<project>
 ...
 <build>
   ...
   <resources>
     <resource>
       <directory>[your folder 1 here]</directory>
     </resource>
     <resource>
       <directory>[your folder 2 here]</directory>
     </resource>
   </resources>
   ...
 </build>
 ...
</project>

请参阅文档

请不要将日志配置文件放入 JARs,如果有人依赖你的 JAR,你的配置可能会覆盖他们的配置。 这取决于先加载哪个 JAR

如果你愿意,像这样。 而package他们变成了JAR

  • 源代码/主要/资源
    • log4j2.xml
    • logback.xml

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM