首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Maven:为什么通过build添加测试源在生成eclipse项目时不起作用?

Maven:为什么通过build添加测试源在生成eclipse项目时不起作用?
EN

Stack Overflow用户
提问于 2013-10-31 08:14:08
回答 4查看 8.3K关注 0票数 5

如果激活了某个配置文件(此处为"java8"),我们的maven pom.xml指定添加一个额外的源和测试源文件夹。pom的相应部分如下所示

代码语言:javascript
复制
    <profile>
        <id>java8</id>
        ....
        <build>
            <plugins>
                ....
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <version>1.8</version>
                    <executions>
                        <execution>
                            <id>add-test-source</id>
                            <phase>generate-test-sources</phase>
                            <goals><goal>add-test-source</goal></goals>
                            <configuration>
                                <sources>
                                    <source>src/test/java8</source>
                                </sources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>

根据http://mojo.codehaus.org/build-helper-maven-plugin/usage.html,这似乎是正确的规范。

运行mvm install -P java8时,我看到额外的测试按预期执行。

但是,运行mvm eclipse:eclipse -P java8时,eclipse .classpath中不会出现附加的测试源文件夹。

问题:如何配置maven以将测试源文件夹添加到eclipse配置中?是上述行为是错误还是错误配置?

EN

回答 4

Stack Overflow用户

发布于 2013-10-31 08:14:08

在对此进行了一些试验之后,我可以部分地回答我自己的问题(希望能节省一些其他开发人员的时间):

如果你用

代码语言:javascript
复制
                            <phase>generate-sources</phase>
                            <goals><goal>add-test-source</goal></goals>

而不是

代码语言:javascript
复制
                            <phase>generate-test-sources</phase>
                            <goals><goal>add-test-source</goal></goals>

然后将测试源文件夹添加到eclipse .classpath (并将其作为测试文件夹添加)。也就是说,我现在正在一个不同的阶段执行“附加测试源”。

换句话说,配置文件如下所示:

代码语言:javascript
复制
    <profile>
        <id>java8</id>
        ....
        <build>
            <plugins>
                ....
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <version>1.8</version>
                    <executions>
                        <execution>
                            <id>add-test-source</id>
                            <phase>generate-sources</phase>
                            <goals><goal>add-test-source</goal></goals>
                            <configuration>
                                <sources>
                                    <source>src/test/java8</source>
                                </sources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>

这看起来像是一个“解决办法”。它仍然与http://mojo.codehaus.org/build-helper-maven-plugin/usage.html的规范相矛盾。

票数 5
EN

Stack Overflow用户

发布于 2015-12-06 12:18:02

您可以使用http://www.eclipse.org/m2e/插件来打开maven pom.xml项目,而不是使用eclipse:eclipse。

一旦在maven中安装了这个插件,就可以利用m2e maven插件,它可以将任何maven阶段映射到eclipse构建生命周期中。在我们的示例中,需要将类似的内容添加到pom.xml中:

代码语言:javascript
复制
<pluginManagement>
  <plugins>
    <plugin>
     <groupId>org.eclipse.m2e</groupId>
     <artifactId>lifecycle-mapping</artifactId>
     <version>1.0.0</version>
     <configuration>
       <lifecycleMappingMetadata>
         <pluginExecutions>
           <pluginExecution>
             <pluginExecutionFilter>
               <groupId>org.codehaus.mojo</groupId>
               <artifactId>build-helper-maven-plugin</artifactId>
               <versionRange>[1.0,)</versionRange>
               <goals>
                 <goal>add-test-source</goal>
               </goals>
               </pluginExecutionFilter>
               <action>
                 <execute>
                   <runOnIncremental>true</runOnIncremental>
                 </execute>
               </action>
            </pluginExecution>
         </pluginExecutions>
       </lifecycleMappingMetadata>
     </configuration>
    </plugin>
  </plugins>
</pluginManagement>  

重要

只有当您安装m2e插件并使用它打开maven项目时,这才能起作用。

票数 2
EN

Stack Overflow用户

发布于 2013-11-02 16:55:30

在我看来,这个插件正在按预期工作。

当您运行mvn install -P java8时,您正在调用阶段install。实际上,maven在install之前执行所有阶段,包括generate-test-sources阶段和test阶段.在它真正执行install之前。因为插件的目标是绑定到generate-test-sources阶段,所以在本例中,您将看到您的测试添加到类路径中并运行。

但是,当您运行mvn eclipse:eclipse -P java8时,您调用的是插件的目标(特别是eclipse插件的eclipse目标),而不是构建生命周期(阶段)。根据eclipse插件的文档,将只调用generate-resources阶段。请注意,generate-resources并不“包括”generate-test-sources (请参阅更多的这里),因此在本例中,您的构建助手插件不会被调用。

如果我猜对了,您将尝试在启用配置文件java8的情况下在Eclipse中运行您的测试。在这种情况下,一种方法是右键单击您的项目,在java8 ->OK中的Active Maven配置文件输入框中单击Maven。现在,右键单击您的项目,并选择Run -> JUnit Test (或任何您正在使用的测试框架)。确保您使用最新的Eclipse版本(开普勒4.3.1到目前为止),因为它有一个内置的m2e插件,它比原来的m2e有了很大的改进。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19701295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档