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-plugin
和 allure-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>
这是我的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-plugin
和 allure-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>