如何在同一进程上执行多个maven deploy命令

时间:2017-09-24 16:26:48

标签: java performance maven process nexus

我正在尝试开发一个获取maven工件目录并将其上传到Nexus 3的工具。该工具正在运行,但我遇到了性能问题。 我的程序为每个必须上传的工件启动一个单独的maven进程。我很好奇这些是否可以以某种方式进行批处理。

我使用maven-invoker库来执行maven命令。

public class MavenUploader {

private final MavenDeployer mavenDeployer;

@Inject
public MavenUploader(MavenDeployer mavenDeployer) {
    this.mavenDeployer = mavenDeployer;
}

@Override
public void uploadToRepository(Path pathToUpload) {
    try (Stream<Path> files = Files.walk(pathToUpload)){
        files.forEach(mavenDeployer::deployArtifact);
    } catch (IOException e) {
        throw new UncheckedIOException(e);
    }
}

这是可以上传工件的类

import org.apache.maven.shared.invoker.*;

public class MavenDeployer {

private final InvocationRequest invocationRequest;
private final Invoker invoker;

@Inject
public MavenDeployer(InvocationRequest invocationRequest,                   
                     Invoker invoker) {
    this.invocationRequest = invocationRequest;
    this.invoker = invoker;
}

public void deployArtifact(Path pathToPom, String commandToExecute) {
    invocationRequest.setGoals(Collections.singletonList(commandToExecute));
    InvocationResult invocationResult = invoker.execute(invocationRequest);
}

每次打开调用新进程的deployArtifact方法时,有一种方法可以批量处理所有上传以使用相同的进程吗?

1 个答案:

答案 0 :(得分:0)

不是maven-deploy,但如果你愿意,可以使用它:https://github.com/DarthHater/nexus-repository-import-scripts

我认为它完成了你想做的事。