Maven 运行 测试,然后编译然后其他测试
Maven run test, then compile then other test
我的目标是使 Maven 能够在一个构建中执行:
- 运行 将随机用户名写入资源文件的测试
- 然后编译和运行测试(使用编译后的资源)
有效方法
使用 test -Dtestgroups="purchase,checkorders"
运行ning 其他测试 (2).
我怀念的东西
运行创建用户名,然后编译和测试。
我的配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<configuration>
<configfailurepolicy>continue</configfailurepolicy>
<systemPropertyVariables>
<url>${url}</url>
<browser>${browser}</browser>
<language>${language}</language>
</systemPropertyVariables>
<includes>
<include>**/*.java</include>
</includes>
<groups>${testGroups}</groups>
<excludedGroups>${excludedGroups}</excludedGroups>
<parallel>classes</parallel>
<threadCount>${threadCount}</threadCount>
<forkMode>once</forkMode>
<workingDirectory>target/</workingDirectory>
</configuration>
</plugin>
我已经阅读了一些关于处决的帖子,但到目前为止还没有成功。
更新:
我设法制作了一个插件。请参阅下面我的回答。
我设法制作了一个插件并发布了它on my github account。我的 Mojo 的 pom:
<groupId>credentials.plugin</groupId>
<artifactId>credentials-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>maven-plugin</packaging>
<name>Credentials Maven Plugin</name>
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<!-- dependencies to annotations -->
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.4</version>
<scope>provided</scope>
</dependency>
</dependencies>
魔力。
@Mojo(name = "credentials")
public class CredentialsMojo extends AbstractMojo {
@Parameter(property = "credentials.propertiesDirectory", defaultValue = "empty")
private String propertiesDirectory;
@Parameter(property = "credentials.propertiesFileName", defaultValue = "credentials")
private String propertiesFileName;
@Parameter(property = "credentials.nameLength", defaultValue = "6")
private int nameLength;
@Parameter(property = "credentials.password", defaultValue = "Welkom01@")
private String password;
public void execute() throws MojoExecutionException {
getLog().info("Creating "+ propertiesFileName +".properties");
parseDirectoryName();
try (OutputStream output = new FileOutputStream(new File(propertiesDirectory + propertiesFileName +".properties"))) {
tryCreateCredentialProperties(output);
} catch (IOException io) {
getLog().error(io);
}
}
private void parseDirectoryName() {
if (propertiesDirectory.equals("empty")) propertiesDirectory = "";
addSlashToDirectory();
}
private void addSlashToDirectory() {
if (propertiesDirectory.equals("") || propertiesDirectory.endsWith("/")) return;
propertiesDirectory = propertiesDirectory + File.separator;
}
private OutputStream tryCreateCredentialProperties(OutputStream output) throws FileNotFoundException, IOException {
final String username = RandomStringUtils.randomAlphanumeric(nameLength);
Properties prop = new Properties();
prop.setProperty("username", username);
prop.setProperty("password", password);
prop.store(output, null);
getLog().info("Username = " + username);
getLog().info("Password = " + password);
return output;
}
}
并且在项目中使用插件:
<properties>
<nameLength>16</nameLength>
<password>qwerty@01</password>
<propertiesDirectory>src/test/resources</propertiesDirectory>
<propertiesFileName>foobar</propertiesFileName>
</properties>
...
<plugin>
<groupId>credentials.plugin</groupId>
<artifactId>credentials-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<configuration>
<nameLength>${nameLength}</nameLength>
<password>${password}</password>
<propertiesDirectory>${propertiesDirectory}</propertiesDirectory>
<propertiesFileName>${propertiesFileName}</propertiesFileName>
</configuration>
</plugin>
我的目标是使 Maven 能够在一个构建中执行:
- 运行 将随机用户名写入资源文件的测试
- 然后编译和运行测试(使用编译后的资源)
有效方法
使用 test -Dtestgroups="purchase,checkorders"
运行ning 其他测试 (2).
我怀念的东西
运行创建用户名,然后编译和测试。
我的配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<configuration>
<configfailurepolicy>continue</configfailurepolicy>
<systemPropertyVariables>
<url>${url}</url>
<browser>${browser}</browser>
<language>${language}</language>
</systemPropertyVariables>
<includes>
<include>**/*.java</include>
</includes>
<groups>${testGroups}</groups>
<excludedGroups>${excludedGroups}</excludedGroups>
<parallel>classes</parallel>
<threadCount>${threadCount}</threadCount>
<forkMode>once</forkMode>
<workingDirectory>target/</workingDirectory>
</configuration>
</plugin>
我已经阅读了一些关于处决的帖子,但到目前为止还没有成功。
更新:
我设法制作了一个插件。请参阅下面我的回答。
我设法制作了一个插件并发布了它on my github account。我的 Mojo 的 pom:
<groupId>credentials.plugin</groupId>
<artifactId>credentials-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>maven-plugin</packaging>
<name>Credentials Maven Plugin</name>
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<!-- dependencies to annotations -->
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.4</version>
<scope>provided</scope>
</dependency>
</dependencies>
魔力。
@Mojo(name = "credentials")
public class CredentialsMojo extends AbstractMojo {
@Parameter(property = "credentials.propertiesDirectory", defaultValue = "empty")
private String propertiesDirectory;
@Parameter(property = "credentials.propertiesFileName", defaultValue = "credentials")
private String propertiesFileName;
@Parameter(property = "credentials.nameLength", defaultValue = "6")
private int nameLength;
@Parameter(property = "credentials.password", defaultValue = "Welkom01@")
private String password;
public void execute() throws MojoExecutionException {
getLog().info("Creating "+ propertiesFileName +".properties");
parseDirectoryName();
try (OutputStream output = new FileOutputStream(new File(propertiesDirectory + propertiesFileName +".properties"))) {
tryCreateCredentialProperties(output);
} catch (IOException io) {
getLog().error(io);
}
}
private void parseDirectoryName() {
if (propertiesDirectory.equals("empty")) propertiesDirectory = "";
addSlashToDirectory();
}
private void addSlashToDirectory() {
if (propertiesDirectory.equals("") || propertiesDirectory.endsWith("/")) return;
propertiesDirectory = propertiesDirectory + File.separator;
}
private OutputStream tryCreateCredentialProperties(OutputStream output) throws FileNotFoundException, IOException {
final String username = RandomStringUtils.randomAlphanumeric(nameLength);
Properties prop = new Properties();
prop.setProperty("username", username);
prop.setProperty("password", password);
prop.store(output, null);
getLog().info("Username = " + username);
getLog().info("Password = " + password);
return output;
}
}
并且在项目中使用插件:
<properties>
<nameLength>16</nameLength>
<password>qwerty@01</password>
<propertiesDirectory>src/test/resources</propertiesDirectory>
<propertiesFileName>foobar</propertiesFileName>
</properties>
...
<plugin>
<groupId>credentials.plugin</groupId>
<artifactId>credentials-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<configuration>
<nameLength>${nameLength}</nameLength>
<password>${password}</password>
<propertiesDirectory>${propertiesDirectory}</propertiesDirectory>
<propertiesFileName>${propertiesFileName}</propertiesFileName>
</configuration>
</plugin>