Java 在Maven概要文件中排除模拟数据源
我有一个java后端项目,其中包括从数据库导入数据的服务。在开发新功能时,我有时需要在本地机器上部署和运行代码。因为我实际上不想在运行实验代码时连接到生产数据库,所以我使用Mockito设置了一个模拟数据源类 模拟数据源工作正常,在本地运行时可以实现我想要的功能。我遇到的问题是,在执行生产部署时,我不希望包含该类及其关联的依赖项。我在maven编译器插件的配置部分添加了一个Java 在Maven概要文件中排除模拟数据源,java,maven,mockito,maven-plugin,Java,Maven,Mockito,Maven Plugin,我有一个java后端项目,其中包括从数据库导入数据的服务。在开发新功能时,我有时需要在本地机器上部署和运行代码。因为我实际上不想在运行实验代码时连接到生产数据库,所以我使用Mockito设置了一个模拟数据源类 模拟数据源工作正常,在本地运行时可以实现我想要的功能。我遇到的问题是,在执行生产部署时,我不希望包含该类及其关联的依赖项。我在maven编译器插件的配置部分添加了一个部分。我将模拟特定的依赖项添加到“本地”配置文件部分。然而,当我实际尝试使用maven进行编译时,我在应该被排除的模拟数据源
部分。我将模拟特定的依赖项添加到“本地”配置文件部分。然而,当我实际尝试使用maven进行编译时,我在应该被排除的模拟数据源类上得到了编译错误。我将在下面发布.pom文件中的相关片段。我已经尝试将excludes语句放在一个特定的概要文件和“default”中,如下所示。如果您能为我们提供帮助,我们将不胜感激
<profiles>
<profile>
<id>local</id>
<properties>
<config>config.dev.properties</config>
</properties>
<dependencies>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>1.9.5</version>
</dependency>
</dependencies>
</profile>
...
</profiles>
<build>
<finalName>order</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<excludes>
<exclude>com/tura/order/guice/mock/**</exclude>
</excludes>
<compilerId>groovy-eclipse-compiler</compilerId>
</configuration>
</plugin>
</plugins>
</build>
地方的
config.dev.properties
org.mockito
莫基托磁芯
1.9.5
...
秩序
org.apache.maven.plugins
maven编译器插件
3.1
com/tura/order/guice/mock/**
groovy eclipse编译器
作为一个更简单的替代方案,您可以将应用程序的替代版本配置为从src/main/test源目录而不是普通目录运行。
您还将删除概要文件,并仅在范围测试(添加测试)中声明mockito依赖项。
这样,您可以在计算机上启动应用程序,但此代码和mockito不会出现在最终版本中
我认为,如果你可以轻松地将应用程序配置为从测试中运行,那会简单得多,但我不明白为什么不是这样。通常,如果有其他方法,避免处理Maven概要文件被认为是良好的做法
编辑:下面是你的问题
所以首先,确保mockito在pom中定义了“test”范围。像这样:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>1.10.19</version>
<scope>test</scope>
</dependency>
org.mockito
莫基托磁芯
1.10.19
测试
那么您的代码就不应该再编译了,因为它在src/main/java下,需要Mockito
将您的代码转移到src/test/java/中,在那里它将能够从测试依赖性中获益(因此是Mockito)。
您必须知道测试依赖项和测试代码(在src/test/中)不会成为最终jar的一部分。这就是你想要的
我忘了说src/test/中的代码可能是您喜欢的任何代码:单元测试测试,使用main(…)方法的应用程序
唯一棘手的部分可能是让代码在测试中工作。但是测试代码“看到”了主代码(反之亦然),因此您必须调用主代码并将其传递给mock,其中mock在测试代码中实例化
希望能有所帮助尽管我喜欢Francois Marot的答案,但另一个选择更简洁(更复杂):将当前项目分成几个部分:
- 一个包含应用程序核心代码的项目:它必须发布没有依赖关系的纯API
- 另一个项目,它必须依赖于核心,包括mockito基础结构以及“本地”环境外观
- 如果需要,最后一个必须依赖于核心,并为“生产”环境添加适当的基础结构和类(取决于复杂性,也许您可以决定将这个包含在核心本身中)
POM将变得更简单,不需要配置文件。我不确定该解决方案是否适用于此项目,但如果找不到更好的方法,我可能会尝试一下。你能给我指一个教程或例子,说明如何建立一个像你描述的项目吗?