pom.xml maven 中的配置文件

Profiles in pom.xml maven

这是我的pom.xml:

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
      <dependencies>
        ... dependencies ...
     </dependencies>

 <profiles> 
        <profile>
            <id>suit1</id>
    <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
     <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.20</version>
            <configuration>
                  <property>
                        <name>allure.results.directory</name>
                        <value>${project.build.directory}/allure-results</value>
                    </property>
                <argLine>   -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/1.9.1/aspectjweaver-1.9.1.jar" </argLine>
                <suiteXmlFiles>      <suiteXmlFile>src/test/java/Smartphones/suite1.xml</suiteXmlFile>                  </suiteXmlFiles>

            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjweaver</artifactId>
                    <version>1.9.1</version>
                </dependency>
            </dependencies>
        </plugin>
       <plugin>
                <groupId>io.qameta.allure</groupId>
                <artifactId>allure-maven</artifactId>
                <version>2.9</version>
            </plugin>
    </plugins>
    </build>

    </profile>
</profiles> 
</project>

我想在这里有很多配置文件。我要在其中添加新套件(编号)。xml

是否可以只留下这个:

<suiteXmlFiles>   
   <suiteXmlFile>
               src/test/java/Smartphones/suite1.xml
    </suiteXmlFile> 
</suiteXmlFiles>

在个人资料部分?并且不要在每个配置文件中复制插件和依赖项?是否可以将此信息移到上面?正确的做法是什么?

A profile 是您在普通 pom 之上添加的内容,因此您应该只在 profile 中添加您想要更改的内容。

在您的情况下,您可以移动主 pom 中的 maven-compiler-pluginallure-maven,并仅复制 surefire 设置。 您也可以尝试将 surefire 的依赖项移动到主 pom.

pluginManagement 部分

如果由于某种原因,您无法在主 pom 中移动这些配置,您可以定义一个所有这些配置通用的配置文件,并为每个 suite.xml 添加一个特定的配置文件。

在这种情况下,您将需要为每次执行启用两个配置文件,common 和 suite。

一切皆有可能!

你应该做的是:

  • pom.xml 的根目录中定义您的 <build/> 部分(而不是在 <profile/> 中)。
  • 在此部分定义您的 <plugin/>。不要定义 <configuration/>,只需定义 <groupId/><artifactId/><version/>,或者如果您确实定义了 <configuration/>,请确保它不是用于您希望提取到 <profile/> 的内容(例如,不要将 <suiteXmlFiles/> 部分放在那里)。
  • 在您的 <profiles> 中定义特定于您的 <profile/> 的不同配置设置。

考虑以下示例:

<project ....>
    ...

    <build>
        <pluginManagement>
            <!-- pluginManagement is used to define the configuration
                 of your plugins and then inherit it
                 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.20</version>
                <configuration>
                    <property>
                        <name>allure.results.directory</name>
                        <value>${project.build.directory}/allure-results</value>
                    </property>
                    <argLine>-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/1.9.1/aspectjweaver-1.9.1.jar"</argLine>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.aspectj</groupId>
                        <artifactId>aspectjweaver</artifactId>
                        <version>1.9.1</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>io.qameta.allure</groupId>
                <artifactId>allure-maven</artifactId>
                <version>2.9</version>
            </plugin>
        </pluginManagement>
        <plugins>
            <!-- When there is a pluginManagement section like the one above,
                 you can just invoke your plugins like without
                 any further configuration -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>io.qameta.allure</groupId>
                <artifactId>allure-maven</artifactId>
            </plugin>
        </plugins>
    </build>

    <profiles> 
        <profile>
            <!-- So, since you're now inheriting from the
                 pluginManagement section and you've declared that
                 your project uses these plugins, you can now extract
                 the suite configuration in a separate profile like this:
                 -->
            <id>suite1</id>

            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>

                        <configuration>
                            <suiteXmlFiles>      

       <suiteXmlFile>src/test/java/Smartphones/suite1.xml</suiteXmlFile>                  
                            </suiteXmlFiles>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>