TL; DR
我必须在Maven配置文件中声明一些依赖项,而Eclipse无法解析这些包。示例如下图所示。
全文
大家好:D
现在我正在一个非常腥的项目工作。我正在开发一个基于Spring Web MVC的Web应用程序,我正在使用Google AppEngine DevServer进行本地开发,即使我认真考虑从GAE迁移的原因还不止于此。
该项目基于GAE的原因是因为我只是继续其他人开始的工作。
无论如何,在开发和增加应用程序功能的同时,它成为了需要使用persitence引擎的时候。我决定实现MongoDB,是的,我知道你不能在GAE环境中使用任何其他东西而不是Datastore。作为持久层我正在使用MongoRepository。到现在为止一切正常。
测试时间到来时出现了问题。为了实现集成测试,除了Fake Mongo Fongo之外,我还使用了内存数据库NoSQLUnit来进行数据填充。
主要问题是Fongo需要mongo java驱动程序才能工作,我无法声明它,也没有任何其他JDBC依赖项,因为GAE DevServer无法正常工作。我不在我的应用程序中使用java-mongo-driver anyware,而不是在集成测试中通过Fongo间接使用。
解决方案是简单地跳过所有测试源编译并在单独的Maven中声明它们,因此每次我想在本地服务器上部署时,我只是跳过所有测试。这不是问题,因为我使用Jenkins for 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的解决方案,而不是定义配置文件和跳过测试。