Eclipse导入在Maven配置文件中声明的依赖项

时间:2017-04-27 11:34:57

标签: java eclipse maven

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中编写代码,因为它无法解析导入,因为它们是在配置文件中声明的。例如。 Eclipse can't resolve dependencies declared in a Maven profile

如何导入和使用我在Maven配置文件中声明的包?

谢谢:)

P.S。:我决定讲完整个故事,所以也许正在或将要通过相同问题的其他人可以找到它。我没有找到任何java-mongo-driver和GAE的解决方案,而不是定义配置文件和跳过测试。

1 个答案:

答案 0 :(得分:1)

找到解决方案。

事实证明,M2Eclipse正在使用活动配置文件,默认情况下,它们不活动。当您声明一个配置文件时,如果您想使用它,显然,他在Eclipse中声明了依赖项,您必须激活它。为此,您必须:

  1. 右键单击您的项目&gt; Maven&gt; 选择Maven个人资料...
  2. enter image description here  2.只需选择要在工作区中导入的所有配置文件。 (复选框)

    enter image description here  工作完成了。

    enter image description here