JarのマニフェストにSubversionのリビジョン番号を埋め込む@maven [Java]
mavaenでJarファイルの生成時にマニフェストファイルにSubersionのリビジョン番号を埋め込む方法。調べるとmavenのプラグインで代表的なところで2つあるらしい。
・maven-svn-revision-number-plugin
https://code.google.com/p/maven-svn-revision-number-plugin/
・buildnumber-maven-plugin
http://mojo.codehaus.org/buildnumber-maven-plugin/index.html
今回はgoogleのmaven-svn-revision-number-pluginを使ってみました。
pom.xmlはこんな感じで。
Jarのマニフェストファイルには、svn-commitedrevisionという名前でSVNのリビジョン番号を突っ込んでいます。
リビジョン番号は、${example.committedRevision}という名前で引っ張り出していますが、ポイントは、pom.xmlの47行目のところで、指定したprefix+(プロパティ名)でアクセスするというところ。
上のpom.xmlだと、prefixには${project.artifactId}を指定しているので、artifactIDのexampleになります。
なので、${example.committedRevision}でリビジョン番号を取得しています。
ローカルにチェックアウトしているリビジョン番号を取得するプロパティは、committedRevisionでアクセスできます。
パラメータの詳しいことは、ドキュメントを参照のこと。
できたJarファイルのマニフェストはこんな感じです。
・maven-svn-revision-number-plugin
https://code.google.com/p/maven-svn-revision-number-plugin/
・buildnumber-maven-plugin
http://mojo.codehaus.org/buildnumber-maven-plugin/index.html
今回はgoogleのmaven-svn-revision-number-pluginを使ってみました。
pom.xmlはこんな感じで。
4.0.0 myGroupId example 1.0-SNAPSHOT jar example UTF-8 true org.apache.maven.plugins maven-jar-plugin 2.1 ${example.committedRevision} com.google.code.maven-svn-revision-number-plugin svn-revision-number-maven-plugin 1.13 revision ${project.basedir} ${project.artifactId} infinity true false false
Jarのマニフェストファイルには、svn-commitedrevisionという名前でSVNのリビジョン番号を突っ込んでいます。
リビジョン番号は、${example.committedRevision}という名前で引っ張り出していますが、ポイントは、pom.xmlの47行目のところで、指定したprefix+(プロパティ名)でアクセスするというところ。
上のpom.xmlだと、prefixには${project.artifactId}を指定しているので、artifactIDのexampleになります。
なので、${example.committedRevision}でリビジョン番号を取得しています。
ローカルにチェックアウトしているリビジョン番号を取得するプロパティは、committedRevisionでアクセスできます。
パラメータの詳しいことは、ドキュメントを参照のこと。
できたJarファイルのマニフェストはこんな感じです。
Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Created-By: Apache Maven Built-By: hoge Build-Jdk: 1.8.0_05 svn-commitedrevision: 3
XMLからNameSpaceを削除@Java [Java]
JavaでXMLを扱う際、XMLにNameSpace(名前空間、ネームスペース)が付いている場合、NameSpaceを削除するにはどうするんだろうといろいろWebで検索したもののこれといった方法が見つからない。
とにかく手っ取り早くNameSpaceを取っ払えればよいので、正直コードの美しさとかはこの際考えない。
で、たどり着いたのがstackoverflowの以下の記事。
How do I remove namespaces from xml, using java dom?
正規表現で解決ということですね。
すばらしい。
が、ちょっと思っていたのと違うぞ。
w3.orgから引っ張ってきた以下のNameSpace付のXMLサンプルを喰わせると、こんな感じになるのです。
変換前
変換後
まずxml宣言が消されてしまうのと、xmlnsが付いていたタグ(bookの閉じタグ前)に変なスペースが残ってしまう。これだとちょっと意図とは違うので、ちょこっと修正して以下のようにしてみました。
先ほどの名前空間付XMLを喰わせると以下のように出力されます。
というわけで、とりあえずはこれで凌ぐことにしました。
(ちなみにバグがあっても責任もてませんので、あしからず。)
とにかく手っ取り早くNameSpaceを取っ払えればよいので、正直コードの美しさとかはこの際考えない。
で、たどり着いたのがstackoverflowの以下の記事。
How do I remove namespaces from xml, using java dom?
正規表現で解決ということですね。
public static String removeXmlStringNamespaceAndPreamble(String xmlString) { return xmlString.replaceAll("(<\\?[^<]*\\?>)?", ""). /* remove preamble */ replaceAll("xmlns.*?(\"|\').*?(\"|\')", "") /* remove xmlns declaration */ .replaceAll("(<)(\\w+:)(.*?>)", "$1$3") /* remove opening tag prefix */ .replaceAll("()", "$1$3"); /* remove closing tags prefix */ }
すばらしい。
が、ちょっと思っていたのと違うぞ。
w3.orgから引っ張ってきた以下のNameSpace付のXMLサンプルを喰わせると、こんな感じになるのです。
変換前
<?xml version="1.1"?> <!-- both namespace prefixes are available throughout --> <bk:book xmlns:bk='urn:loc.gov:books' xmlns:isbn='urn:ISBN:0-395-36341-6'> <bk:title>Cheaper by the Dozen</bk:title> <isbn:number>1568491379</isbn:number> </bk:book>
変換後
<!-- both namespace prefixes are available throughout --> <book > <title>Cheaper by the Dozen</title> <number>1568491379</number> </book>
まずxml宣言が消されてしまうのと、xmlnsが付いていたタグ(bookの閉じタグ前)に変なスペースが残ってしまう。これだとちょっと意図とは違うので、ちょこっと修正して以下のようにしてみました。
public static String removeXmlStringNamespaceAndPreamble(String xmlString) { return xmlString.replaceAll("\\s*xmlns.*?(\"|\').*?(\"|\')\\s*", "") /* remove xmlns declaration */ .replaceAll("(<)(\\w+:)(.*?>)", "$1$3") /* remove opening tag prefix */ .replaceAll("()", "$1$3"); /* remove closing tags prefix */ }
先ほどの名前空間付XMLを喰わせると以下のように出力されます。
<?xml version="1.1"?> <!-- both namespace prefixes are available throughout --> <book> <title>Cheaper by the Dozen</title> <number>1568491379</number> </book>
というわけで、とりあえずはこれで凌ぐことにしました。
(ちなみにバグがあっても責任もてませんので、あしからず。)