Nov 28, 2005

[Maven] maven-metadata.xml の読み込み方

先日作成した MavenRepositoryBrowser で使用した maven-metadata.xml の読み込み方法をメモ。

maven-metadata.xml 読み込みの実行環境構築

  1. maven-repository-metadata-2.0.jar をクラスパスに追加。
  2. plexus-utils-1.0.4.jar をクラスパスに追加。

サンプルコード

org.apache.maven.artifact.repository.metadata.Metadata というクラスが Metadata を表す。 ストリーム等から maven-metadata.xml を読み込み Metadata を生成するのが org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader。 この 2 つのクラスを利用すると苦も無く maven-metadata.xml を読み込むことができる。便利。

    public Metadata readMetadata(final String groupId,
            final String artifactId, final String version) throws Exception {
        String mavenMetadataRelativePath = "/" + groupId.replaceAll("\\.", "/")
                + "/" + artifactId + "/" + version + "/" + "maven-metadata.xml";
        String repositoryRootPath = this.repositoryRoot.toExternalForm();
        if (!repositoryRootPath.endsWith("/")) {
            repositoryRootPath = repositoryRootPath + "/";
        }

        URL mavenMetadataURL = new URL(repositoryRootPath
                + mavenMetadataRelativePath);
        Metadata metadata = this.readMetadata(mavenMetadataURL);
        return metadata;
    }

    protected Metadata readMetadata(final URL url) throws Exception {

        Metadata metadata = null;
        InputStream is = null;
        Reader source = null;
        try {
            URLConnection connection = url.openConnection();
            is = connection.getInputStream();
            source = new InputStreamReader(is);

            MetadataXpp3Reader reader = new MetadataXpp3Reader();
            metadata = reader.read(source);
        } finally {
            try {
                if (is != null) {
                    is.close();
                }
            } finally {
                if (source != null) {
                    source.close();
                }
            }
        }
        return mavenMetadata;
    }

Posted in Maven | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |