Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Maven概要文件中排除模拟数据源_Java_Maven_Mockito_Maven Plugin - Fatal编程技术网

Java 在Maven概要文件中排除模拟数据源

Java 在Maven概要文件中排除模拟数据源,java,maven,mockito,maven-plugin,Java,Maven,Mockito,Maven Plugin,我有一个java后端项目,其中包括从数据库导入数据的服务。在开发新功能时,我有时需要在本地机器上部署和运行代码。因为我实际上不想在运行实验代码时连接到生产数据库,所以我使用Mockito设置了一个模拟数据源类 模拟数据源工作正常,在本地运行时可以实现我想要的功能。我遇到的问题是,在执行生产部署时,我不希望包含该类及其关联的依赖项。我在maven编译器插件的配置部分添加了一个部分。我将模拟特定的依赖项添加到“本地”配置文件部分。然而,当我实际尝试使用maven进行编译时,我在应该被排除的模拟数据源

我有一个java后端项目,其中包括从数据库导入数据的服务。在开发新功能时,我有时需要在本地机器上部署和运行代码。因为我实际上不想在运行实验代码时连接到生产数据库,所以我使用Mockito设置了一个模拟数据源类

模拟数据源工作正常,在本地运行时可以实现我想要的功能。我遇到的问题是,在执行生产部署时,我不希望包含该类及其关联的依赖项。我在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基础结构以及“本地”环境外观
  • 如果需要,最后一个必须依赖于核心,并为“生产”环境添加适当的基础结构和类(取决于复杂性,也许您可以决定将这个包含在核心本身中)
通过这种方式,您将代码打包到100%可重用的库中,并为每个所需的目标环境制作一个分发版,这样就不会有任何一个被针对其他目标环境的代码污染


POM将变得更简单,不需要配置文件。

我不确定该解决方案是否适用于此项目,但如果找不到更好的方法,我可能会尝试一下。你能给我指一个教程或例子,说明如何建立一个像你描述的项目吗?