我有一个项目,其中包括一些Java API,一些资源文件以及一些可供Java API使用的预构建机器学习模型。模型目前位于src/main/resources
,类通过Class.getResource
加载。这些模型用于多个单元测试,以确保API按预期工作。
这一切都很好,除了模型非常大,API的一些用户可能根本不需要模型。 (他们只需要Java类和其他较小的资源文件。)所以我想安排一个用户可以选择包含模型文件的发行版。
起初我认为模型应该是他们自己的独立Maven项目,但是如果我把它们拉出来,我不确定依赖项是如何工作的。模型项目必须依赖于Java API的主项目,但主项目必须依赖于模型项目进行测试。所以这似乎是循环的。
然后我想也许我应该尝试用分类器创建一个单独的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
才会发生这种情况,并且不需要使用不同的配置文件,因为我总是以相同的方式打包。 )
答案 0 :(得分:2)
鉴于这些要点......
我认为问题在于您使用可交付模型进行单元测试。
我建议您执行以下操作:
src/main/resources
中。您的API模块将不再包含src/main/resources
。src/test/resources
中。尽可能简化它们以测试API功能。重新编写API单元测试以使用它们。作为起点,您可以制作可交付模型的副本并将它们放在此处,但我建议使用一组较小的测试数据,其中包含模型可以包含的各种事物的示例。这使您无需模块循环,与API分离的模型,API的单元测试以及可交付模型的可选单元测试。