2014年7月6日日曜日

Invalid implementation version between Ant core and Ant optional tasks.

CentOS上のantを1.9.4にバージョンアップしようとしたら以下のエラーが発生した

[root@localhost tmp]# ant
Invalid implementation version between Ant core and Ant optional tasks.
 core    : 1.8.1 in file:/root/.m2/repository/org/apache/ant/ant/1.8.1/ant-1.8.1.jar
 optional: null in file:/usr/local/ant/lib/ant.jar

まず原因(の予想)ですが、実行しているantのバージョンは1.9.4だけど、実行のために必要なjarファイルのバージョンは1.8.1だよ
と言って怒られているのが原因かなと思います

パスを見ると .m2 内の jar ファイルのバージョンが古いと言って怒られており、.m2 なので一件関係ないような気がするのですが
今回の場合(というか私の場合).m2 配下に存在する jar ファイルをすべて CLASS_PATH に追加しています

ant のソースコードを見たわけではないので詳しくはわからないですが、おそらく ant は CLASS_PATH 上に存在する ant用の jar ファイルを優先的に使うようになっており
その jar と実行しようとしている ant のバージョンが異なっているので実行に失敗していると思われます
(すいません、念押ししますがこの辺りはかなり推測が含まれます。。。)

解決する方法としては
  • ant の1.8.1を使う
  • .m2 (CLASS_PATH 上)に ant-1.9.4 の jar を配置する

で解決できるかと思います
そして、今回は下の方法で解決できましたので紹介します

1. jar をインストールするための maven プロジェクトを作成
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=com.sample.bbb -DartifactId=bbb
2. pom.xml のdependencies タグ内にに以下を追記
<dependency>
  <groupId>org.apache.ant</groupId>
  <artifactId>ant</artifactId>
  <version>1.9.4</version>
</dependency>
3. jar のダウンロード
mvn clean install
4. .m2 上に jar がダウンロードされることを確認する

その後 新しく追加された jar を CLASS_PATH の設定に追加するために再ログインしました
(自分の場合は再ログインすることで CLASS_PATH が更新される仕組みを .bashrc に記載しているため)
といった感じで今回は解決できました
正直バットノウハウ過ぎますが、念のためメモしておきます

0 件のコメント:

コメントを投稿