cobertura-maven-plugin и cassandra-maven-plugin привели к тому, что cassandra.rpcPort отличается

У меня есть следующая конфигурация в моем pom.xml

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>1.8</version>
            <executions>
                <execution>
                    <id>reserve-network-port</id>
                    <goals>
                        <goal>reserve-network-port</goal>
                    </goals>
                    <phase>process-resources</phase>
                    <configuration>
                        <portNames>
                            <portName>cassandra.rpcPort</portName>
                            <portName>cassandra.jmxPort</portName>
                            <portName>cassandra.storagePort</portName>
                            <portName>cassandra.stopPort</portName>
                        </portNames>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.12</version>
            <executions>
                <execution>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>test</goal>
                    </goals>
                    <configuration>
                        <enableAssertions>true</enableAssertions>
                        <excludes>
                            <exclude>none</exclude>
                        </excludes>
                        <includes>
                            <include>**/integration/**/*Test.java</include>
                        </includes>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cassandra-maven-plugin</artifactId>
            <version>1.2.1-1</version>
            <executions>
                <execution>
                    <id>start-cassandra</id>
                    <phase>pre-integration-test</phase>
                    <goals>
                        <goal>start</goal>
                    </goals>
                </execution>
                <execution>
                    <id>stop-cassandra</id>
                    <phase>post-integration-test</phase>
                    <goals>
                        <goal>stop</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
            <version>2.5.1</version>
            <executions>
                <execution>
                    <phase>test</phase>
                    <goals>
                        <goal>cobertura</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <formats>
                    <format>html</format>
                    <format>xml</format>
                </formats>
            </configuration>
        </plugin>

     <testResources>
        <testResource>
            <directory>src/test/resources</directory>
            <includes>
                <include>*.*</include>
            </includes>
            <filtering>true</filtering>
        </testResource>
     </testResources>

и файл свойств имеет эту строку cassandra_host=127.0.0.1:${cassandra.rpcPort}

Код использует это свойство для подключения к экземпляру cassandra. Поэтому всякий раз, когда я запускаю mvn clean install, cassandra.rpcPort генерируется дважды, один раз при запуске остальных и один при запуске cobertura. например.

[INFO] Reserved port 60315 for cassandra.rpcPort
[INFO] Reserved port 60316 for cassandra.jmxPort
[INFO] Reserved port 60317 for cassandra.storagePort
[INFO] Reserved port 60318 for cassandra.stopPort

затем, когда cobertura бежит,

[INFO] Reserved port 60319 for cassandra.rpcPort
[INFO] Reserved port 60320 for cassandra.jmxPort
[INFO] Reserved port 60321 for cassandra.storagePort
[INFO] Reserved port 60322 for cassandra.stopPort

И cassandra-maven-plugin генерирует файл target/cassandra/conf/cassandra.yaml с rpc_port: 60315 (исходный порт, а не порт от cobertura). Однако файл свойств имеет значение порта, сгенерированное cobertura.

Если я отключил плагин cobertura, то все работает успешно. Кто-нибудь знает, как обойти эту проблему?

Спасибо и с уважением Тин


person Tin Ng    schedule 29.12.2014    source источник


Ответы (1)


Хорошо, я решил проблему, переместив build-helper-maven-plugin на этап подготовки пакета и добавив следующее

<plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.7</version>
                <executions>
                    <execution>
                        <id>copy-test-resources</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.testOutputDirectory}</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>${project.basedir}/src/test/resources</directory>
                                    <includes>
                                        <include>*.properties</include>
                                    </includes>
                                    <filtering>true</filtering>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

Таким образом, плагин cobertura уже готов, а сетевые порты сканируются/резервируются только один раз. Надеюсь, это может помочь кому-то в будущем.

person Tin Ng    schedule 05.01.2015