在我的Maven项目中,有一个模块(核心),该类具有一些资源。在模块中运行类时,它可以获取自己的资源。一切正常。
当依赖于核心的另一个模块尝试运行该类时,东西就会中断。Java在其中寻找资源的文件夹是此模块,而不是核心模块。因此,该类失败了。
简而言之:如何访问依赖项的资源?
我已经尝试通过在Core的JAR Manifest中进行声明来做到这一点Class-Path: .
。但是,当列出可用的资源时JSHookLoader.class.getClassLoader().getResources("");
(JSHookLoader在Core中,如果有任何含义),我得到:
Resource: W:\programming\quackbot-hg\impl\target\classes
File rebel.xml
Resource: W:\programming\maven-repo\org\quackbot\core\3.5-SNAPSHOT
File core-3.5-SNAPSHOT.jar
File core-3.5-SNAPSHOT.pom
File maven-metadata-local.xml
File _maven.repositories
当然,这会使事情变得复杂,因为我期望JAR本身位于类路径中,而不是JAR所在的目录中
有什么建议?
回到这个项目,我仍然有这个问题。其他指南也讨论了如何使用maven-assembly-
plugin和远程资源插件,但这很麻烦,因为所有模块都必须包含Monster插件XML。
我为什么不简化这个问题:如何将依赖关系JAR添加到资源列表?
这应该足够简单,但是我该怎么做呢?我已经花了数小时试图找出一种简单而干净的方法,但无济于事。
经过大量搜索,我终于偶然发现了一个解决方案。
我的解决方案采用了核心模块,并使用Maven Dependency Plugin解压缩,确保排除META-
INF文件夹和org文件夹(已编译类所在的位置)。我之所以要排除我不想要的东西,而不是明确说明我想要的东西,是因为可以轻松添加新资源,而不必一直更新我的POM。
我之所以不使用Assembly插件或Remote
Resources插件,是因为它们使用了专用的资源模块。我认为我不必制作一个核心模块和一个核心资源模块,而核心资源模块仅包含logback和hibernate配置文件以及其他一些东西。
这是我正在执行此操作的副本
<build>
<plugins>
<!--Extract core's resources-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<id>unpack</id>
<phase>generate-resources</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<includeGroupIds>${project.groupId}</includeGroupIds>
<includeArtifactIds>core</includeArtifactIds>
<excludeTransitive>true</excludeTransitive>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/core-resources</outputDirectory>
<excludes>org/**,META-INF/**,rebel.xml</excludes>
<overWriteReleases>true</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<!--New resource locations-->
<resources>
<resource>
<filtering>false</filtering>
<directory>${project.build.directory}/core-resources</directory>
</resource>
<resource>
<filtering>false</filtering>
<directory>${basedir}/src/main/resources</directory>
</resource>
</resources>
</build>
null
4.6 资源依赖 如果bean本身将通过某种动态过程来确定和提供资源路径,那么bean可以使用ResourceLoader接口来加载资源。 j假设以某种方式加载一个模板,其中需要的特定资源取决于用户的角色。 如果资源是静态的,那么完全消除ResourceLoader接口的使用是有意义的,只需让bean公开它需要的Resource属性,那么它们就会以你所期望的方式被注入。 什么使得它们轻松注入这些属
我给ivy添加了一个依赖项(我们称之为a)。在maven central中具有pom文件的xml。Ivy使用ibiblio来解析maven依赖项。添加到常春藤中的依赖项(A)。xml具有可传递依赖项(B)。到目前为止,一切都很好。传递依赖(B)的依赖(C)不能用常春藤来解决。 我在常春藤上定义了一个新的名字。如下所示的xml: 在B的pom文件中,C在编译和测试范围中定义如下: 当我在ivy的缓存
我们有一个使用Spring Boot编写的新项目,其中我们使用Log4j2进行日志记录。 问题是我们需要使用一个遗留库,我们拥有它,但我们不能改变;其他几个系统使用它,我们不能通过改变所有这些系统来扩大我们的范围。 当我们的项目运行时,它使用Log4j2记录的很好,但是当我们调用遗留库时,它会调用Log4j,从而抛出异常。 在我们使用log4j2的新应用程序中,有没有办法处理旧的log4j调用?
最近,我发现了以下问题: 当我为我的项目设置依赖项管理时,我有一个child-pom,它使用具有依赖项的插件,我想要与在我的依赖项管理中声明的依赖项同步。 在根pom中,我在依赖项管理中声明: 在子pom中,我有一个插件需要gwt-user: 但是,如果我移除gwt-maven-plugin中使用的依赖版本,编译就会失败。 是不是还有别的办法可以实现呢? PS:在maven和maven插件中有一个