如何让maven只打印pom坐标?

时间:2014-07-01 14:03:52

标签: maven maven-3

我希望maven为我解析一个pom文件,然后打印出生成的工件的坐标。 Maven显然正在解析这个信息,我只是想知道如何打印它然后让maven停止。我想在一些shell脚本中使用它,并且在bash中解析pom似乎很麻烦 - 特别是在所有继承含义和依赖性坐标中列出。我不希望任何建筑物发生,因为我可能只有POM,而不是源文件。

到目前为止,我发现的最佳方法是解析输出:

mvn -N dependency:tree

这似乎有点重,因为它解析所有依赖项。有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

你可以创建一个小的java程序,它完全按照以下方式执行:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.maven.model.Model;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;

public class PomRead {

    public String getPomVersion(Model model) {
        String result = model.getVersion();
        if (result == null) {
            throw new IllegalArgumentException("The artifact does not define a version.");
        }
        return result;
    }

    public Model readModel(InputStream is) throws IOException, XmlPullParserException {
        MavenXpp3Reader model = new MavenXpp3Reader();
        Model read = model.read(is);
        return read;
    }

    public Model readModel(File file) throws IOException, XmlPullParserException {
        FileInputStream fis = new FileInputStream(file);
        return readModel(fis);
    }

    public String getVersionFromPom(File pomFile) throws IOException, XmlPullParserException {
        Model model = readModel(pomFile);
        return getPomVersion(model);
    }

    public static void main(String[] args) {
        if (args.length != 1) {
            System.err.println("Invalid number of arguments.");
            System.err.println("");
            System.err.println("usage: pom.xml");
            return;
        }

        String pom = args[0];
        File pomFile = new File(pom);
        if (!pomFile.exists() || !pomFile.isFile() || !pomFile.canRead()) {
            System.err.println("File " + pomFile + " can not be accessed or does not exist.");
            return;
        }

        PomRead pomRead = new PomRead();
        try {
            String version = pomRead.getVersionFromPom(pomFile);
            System.out.println(version);
        } catch (IllegalArgumentException e) {
            System.err.println(e.getMessage());
        } catch (IOException e) {
            System.err.println(e.getMessage());
        } catch (XmlPullParserException e) {
            System.err.println(e.getMessage());
        }

    }
}

对于那个单一依赖很重要的小程序,当然需要以下pom.xml:

<dependency>
  <groupId>org.apache.maven</groupId>
  <artifactId>maven-model</artifactId>
  <version>3.0.5</version>
</dependency>

可能应该将这样一个目标添加到众多maven插件之一来支持这样的事情。上面只打印出版本,但可以简单地增强打印groupId和artifactId。