【发布时间】:2017-04-27 11:34:57
【问题描述】:
TL;DR
我必须在 Maven 配置文件中声明一些依赖项,而 Eclipse 无法解析这些包。下图中的示例。
全文
大家好:D
现在我在一个非常可疑的项目环境中工作。我正在开发一个基于 Spring Web MVC 的 Web 应用程序,并且我正在使用 Google AppEngine DevServer 进行本地开发,尽管出于明显的原因,我正在认真考虑从 GAE 迁移。
该项目基于 GAE 的原因是因为我只是在继续其他人很久以前开始的工作。
无论如何,在开发和增加应用程序功能的同时,需要持久性引擎。我决定实现 MongoDB,是的,我知道在 GAE 环境中除了 Datastore 之外,您不能使用任何其他东西。作为持久层,我使用的是 MongoRepository。到目前为止一切正常。
测试时间到了,问题就来了。为了实现集成测试,除了NoSQLUnit 之外,我还使用了一个内存数据库Fake Mongo Fongo 来填充数据。
主要问题是 Fongo 需要 mongo java 驱动程序才能工作,我不能声明它,也不能声明任何其他 JDBC 依赖项,因为 GAE DevServer 无法工作。我不在我的应用程序中使用 java-mongo-driver 任何软件,而不是通过 Fongo 在集成测试中间接使用。
解决方案是简单地跳过所有测试源编译并在单独的 Maven 中声明它们,因此每次我想在本地服务器上部署时,我只需跳过所有测试。这不是问题,因为我使用 Jenkins 进行 CI 和 SonarQube 进行覆盖(使用 JaCoCo),所以我可以在那里简单地执行测试。
现在我的 pom.xml 中包含所有应用程序依赖项,所以我可以 mvn clean install -Dmaven.test.skip=true 然后我有一个 <profile> 声明如下:
<profile>
<id>testing</id>
<dependencies>
<dependency>
<groupId>com.github.fakemongo</groupId>
<artifactId>fongo</artifactId>
<version>2.0.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.lordofthejars</groupId>
<artifactId>nosqlunit-mongodb</artifactId>
<version>0.7.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.4.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>
<configuration>
<junitArtifactName>junit:junit</junitArtifactName>
<encoding>UTF-8</encoding>
<inputEncoding>UTF-8</inputEncoding>
<outputEncoding>UTF-8</outputEncoding>
</configuration>
</plugin>
</plugins>
</build>
</profile>
所以我可以在 Jenkins 检测到推送时mvn clean test -Ptesting。
问题是我无法在 Eclipse 中编写代码,因为它无法解析导入,因为它们是在配置文件中声明的。例如。
如何导入和使用我在 Maven 配置文件中声明的包?
谢谢你:)
P.S.:我决定讲述完整的故事,这样也许其他正在或将要解决同样问题的人可以找到它。我没有找到 java-mongo-driver 和 GAE 的任何解决方案,而不是定义配置文件和跳过测试。
【问题讨论】:
-
作为一种解决方法,您可以尝试手动将缺少的依赖项添加到 Eclipse 项目类路径设置中(除了 pom 所说的)。
-
我也在考虑这个问题,因为这是一个 IDE 问题。真正让我吃惊的是,我无法通过谷歌搜索找到解决方案