![](/img/trans.png)
[英]Gradle: how do I include a local jar from a dependent java project in an Android build?
[英]Include files from a JAR in a dependent project
我想跨多个项目同步 log4j 和 logback 配置文件。 我有一个项目(项目 A),其中包含 log4j 和 logback 依赖项以及配置文件。
项目A
项目 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 许可证的副本和一个引用给定项目中所有使用软件的通知文件
<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>
请参阅文档
<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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.