JavaMaven使用不同的分类器将一些资源分离到一个jar中
我有一个项目,其中包括一些Java API、一些资源文件和一些可以被Java API使用的预构建机器学习模型。模型当前在src/main/resources
中,类通过Class.getResource
加载它们。这些模型用于几个单元测试,以确保API按预期工作
这基本上没问题,只是模型非常大,一些API用户可能根本不需要模型。(他们只需要Java类和其他较小的资源文件。)所以我想安排一个发行版,用户可以选择是否包含模型文件
起初,我认为这些模型可能应该是一个独立的Maven项目,但如果我把它们取出来,我不确定依赖项会如何工作。models项目必须依赖于JavaAPI的主项目,但主项目必须依赖于models项目进行测试。所以这似乎是循环的
然后我想也许我应该尝试创建一个带有分类器的独立jar,这样,例如,只需要API的用户就可以编写:
<dependency>
<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>0.5.0</version>
</dependency>
想要API和模型的用户会写:
<dependency>
<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>0.5.0</version>
</dependency>
<dependency>
<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>0.5.0</version>
<classifier>models</classifier>
</dependency>
但我不知道如何设置,以便在运行mvn package
时,将一些资源分离到一个具有不同分类器的jar中。我该怎么做
(理想情况下,这一切都只需要基本的mvn package
就可以实现,并且不需要用不同的配置文件来进行调整,因为我总是用相同的方式来包装东西。)
# 1 楼答案
鉴于这些观点
我认为问题在于,您正在使用可交付模型进行单元测试
我建议您执行以下操作:
src/main/resources
。API模块将不再在src/main/resources
中有模型李>src/test/resources
中。让他们尽可能少地测试API功能。重新编写API单元测试以使用它们。作为一个起点,你可以制作一份可交付模型的副本,并将它们放在这里,但我建议使用一组较小的测试数据,其中包含模型可以包含的每种类型的示例李>这就不需要模块周期、与API分离的模型、API的单元测试,以及可选的可交付模型的单元测试