谁能给编程方式使用org.apache.maven.cli.MavenCli的一个很好的例子?

StackOverflow https://stackoverflow.com/questions/4206679

  •  25-09-2019
  •  | 
  •  

我试图创建一个的IntelliJ插件,需要对当前项目执行Maven的目标。在intertubes所有的谈话建议使用MavenEmbedder。祝你好运。 2.0.4版本不能很好地支持,并有对如何使用它的引用。

我给它一个旋转,冲进其中嵌入尚未初始化它需要的所有领域的墙上。反光私有成员注射?真棒!为什么会有人需要一个显而易见的方法来初始化一个对象?

这似乎是一个少数人使用的是2.1版本取得了一些成功。我一直无法找到,在一个罐子,甚至来源。

我去检查了3.0版本的嵌入项目: http://maven.apache.org/ref/3.0-beta-3/maven-embedder/ 它摒弃了MavenEmbedder对象一起,似乎通过对MavenCli主或域方法只支持接入。有没有人使用这些方法,可以给些建议吗?

有帮助吗?

解决方案

呀,没有太多的MavenCli的文档的方式。 API是significatly简单,但我还是想一些例子。这里有一个工程......

MavenCli cli = new MavenCli();
int result = cli.doMain(new String[]{"compile"},
        "/home/aioffe/workspace/MiscMaven",
        System.out, System.out);
System.out.println("result: " + result);

它需要一个目录,并运行“编译”阶段...

其他提示

maven 3.1.1工作行家配置

依赖关系

<dependencies>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-embedder</artifactId>
        <version>3.1.1</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.aether</groupId>
        <artifactId>aether-connector-wagon</artifactId>
        <version>0.9.0.M2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-http-lightweight</artifactId>
        <version>2.5</version>
    </dependency>
</dependencies>

代码

MavenCli cli = new MavenCli();

cli.doMain(new String[]{"clean", "compile"}, "project_dir", System.out, System.out);

为提供范围和动态获取的部件的相关矩阵信息可以是有点混乱。这对我来说,因为它在我看来,我得到了所有需要的物品通过直接或传递依赖,但随后远程决议没有工作。

我希望跳到的Maven 3.3.3(最新为2015年5月25日)。我得到了它没有这种呈现时,我试图乐观更新到这里(和其他国家)规定的事情当前版本SISU错误工作。这与用指定为今天使用JDK8的示例工作了标签的项目。

https://github.com/mykelalvis/test-maven-嵌入器/树/ 20150525-工作

相关DEPS(SLF4J是,这样我可以看到日志)

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.5</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-embedder</artifactId>
        <version>3.3.3</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.aether</groupId>
        <artifactId>aether-connector-basic</artifactId>
        <version>1.0.2.v20150114</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.aether</groupId>
        <artifactId>aether-transport-wagon</artifactId>
        <version>1.0.2.v20150114</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-http</artifactId>
        <version>2.9</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-provider-api</artifactId>
        <version>2.9</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-http-lightweight</artifactId>
        <version>2.9</version>
    </dependency>   

运行是这样的:

rm -r ~/.m2/repository/org/apache/maven/plugins/maven-clean-plugin/
mvn exec:java

或许应该使人们某种形式的单元测试。

如果某人具有一个优越的解决方案嵌入的Maven 3.3.3(即想出了一个更小或更面向范围设定需要的依赖的),请张贴他们。

的基础上从所述@StevePerkins评论,使用Maven版本3.1.0,

我不得不排除以太网连接器旅行车的传递性依赖于货车提供商的API得到它的工作。

的pom.xml:

(...)
<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-embedder</artifactId>
    <version>3.1.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.eclipse.aether</groupId>
    <artifactId>aether-connector-wagon</artifactId>
    <version>0.9.0.M2</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-provider-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.maven.wagon</groupId>
    <artifactId>wagon-http</artifactId>
    <version>2.5</version>
    <scope>test</scope>
</dependency>
(...)

和这里是一个java示例:

(...)
MavenCli cli = new MavenCli();

ByteArrayOutputStream baosOut = new ByteArrayOutputStream();
ByteArrayOutputStream baosErr = new ByteArrayOutputStream();

PrintStream out = new PrintStream(baosOut, true);
PrintStream err = new PrintStream(baosErr, true);

cli.doMain( new String[] { "clean" }, new File("."), out, err );

String stdout = baosOut.toString("UTF-8");
String stderr = baosErr.toString("UTF-8");
(...)

完整的例子这里

有对于Maven的嵌入器,例如每个版本相关性矩阵为3.2.5: http://maven.apache.org/ REF / 3.2.5 /行家嵌/ dependencies.html

根据我不得不使用org.apache.maven:maven-embedder:jar:3.2.5org.apache.maven:maven-aether-provider:jar:3.2.5,和org.apache.maven.wagon:wagon-provider-api:jar:2.8

它还修正很老的番石榴库的依赖关系,因为这个版本采用18.0。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top