Nov 27, 2005
[Maven] pom.xml の読み込み方
先日作成した MavenRepositoryBrowser で使用した pom.xml の読み込み方法をメモ。
pom.xml 読み込みの実行環境構築
- maven-model-2.0.jar をクラスパスに追加。
- plexus-utils-1.0.4.jar をクラスパスに追加。
サンプルコード
org.apache.maven.model.Model というクラスが POM を表す。 ストリーム等から pom.xml を読み込み Model を生成するのが org.apache.maven.model.io.xpp3.MavenXpp3Reader。 この 2 つのクラスを利用すると苦も無く pom.xml を読み込むことができる。便利。
public Model readModel(final String groupId, final String artifactId,
final String version) throws Exception {
// Maven2 リポジトリのディレクトリ構成に合わせて URL を生成。
String pomRelativePath = "/" + groupId.replaceAll("\\.", "/") + "/"
+ artifactId + "/" + version + "/" + artifactId + "-" + version
+ ".pom";
String repositoryRootPath = this.repositoryRoot.toExternalForm();
if (!repositoryRootPath.endsWith("/")) {
repositoryRootPath = repositoryRootPath + "/";
}
// pom.xml の読み込み。
URL pomURL = new URL(repositoryRootPath + pomRelativePath);
Model model = this.readModel(pomURL);
return model;
}
protected Model readModel(final URL url) throws Exception {
Model model = null;
InputStream is = null;
Reader source = null;
try {
// 指定された URL からデータを取得
URLConnection connection = url.openConnection();
is = connection.getInputStream();
source = new InputStreamReader(is);
// pom.xml の解析
MavenXpp3Reader reader = new MavenXpp3Reader();
model = reader.read(source);
} finally {
try {
if (is != null) {
is.close();
}
} finally {
if (source != null) {
source.close();
}
}
}
return model;
}



