0

我有一个 Maven 项目,它读取一个外部属性文件来过滤资源。这在使用 mvn 包时工作正常,但从 JUnit 测试开始,这只有在 pom 本身而不是属性文件中声明属性时才有效,所以我认为插件配置是问题所在。我在我的 pom 中得到了这个:

<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>properties-maven-plugin</artifactId>
              <versionRange>[1.0-alpha-2,)</versionRange>
              <goals>
                <goal>read-project-properties</goal>
              </goals>
            </pluginExecutionFilter>
            <action>
              <execute />
            </action>
          </pluginExecution>
        </pluginExecutions>
      </lifecycleMappingMetadata>
    </configuration>
  </plugin>
  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>properties-maven-plugin</artifactId>
    <version>1.0-alpha-2</version>
    <executions>
      <execution>
        <phase>initialize</phase>
        <goals>
          <goal>read-project-properties</goal>
        </goals>
        <configuration>
          <files>
            <file>${build.properties.file}</file>
          </files>
        </configuration>
      </execution>
    </executions>
  </plugin>

生命周期在 Eclipse 中被标记为红色。

编辑:

m2e 部分需要被插件管理包围,然后错误就消失了。我可以看到目标现在正在 Maven 首选项下执行。

但如果我使用这个插件,它实际上仍然没有在从 eclipse 执行单元测试时过滤资源。所以这仍然是开放的;)

4

2 回答 2

0

尝试将生命周期映射插件包含在如下块中。我已经使用其他没有 Eclipse 连接器的 Maven 插件成功地做到了这一点。

    <profile>
      <!-- Contents of this profile are only needed to make this project work in       
           Eclipse. Once all appropriate m2e connectors are available, this can be
           removed -->
        <id>m2e</id>
        <activation>
            <property>
                <name>m2e.version</name>
            </property>
        </activation>
        <build>
          <pluginManagement>
            <plugins>
              <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <!-- other plugin config here ->
              </plugin>
            </plugins>
          </pluginManagement>
        </build>
      </profile>

编辑:好的,你现在在 Eclipse 中有一个绿色构建,所以尝试用这个替换<execute/>配置中的标签:

<execute>
    <runOnIncremental>true</runOnIncremental>
    <runOnConfiguration>true</runOnConfiguration>
</execute>

然后再次执行 Maven --> Update Project。

Eclipse Wiki 页面上的主题

于 2013-10-08T16:36:56.940 回答
0

当您说运行时它可以正常工作时,我不是很清楚,mvn package因为包将运行测试用例。所以我的假设可能是通过跳过测试包运行正常。为了将属性传递给测试用例,您可以使用surefire插件,如下所示:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.4.2</version>
    <configuration>
      <systemProperties>
        <property>
          <name>filePath</name>
          <value>/path/to/the/file</value>
        </property>
      </systemProperties>
    </configuration>
  </plugin>

这将选择属性并传递给测试用例。

于 2013-10-08T16:03:16.540 回答