ラベル Ant の投稿を表示しています。 すべての投稿を表示
ラベル Ant の投稿を表示しています。 すべての投稿を表示

2014年9月9日火曜日

CentOSにAntをインストール

概要

CentOSにビルドツールであるAntをインストールする方法を紹介します

環境準備

  • CentOS
    6.5
  • Java
    OpenJDK 1.7.0_65 (yum で install した最新のバージョン)
  • Ant
    1.9.4 (今回インストールするバージョン)

インストールコマンド

cd /var/tmp/
wget http://ftp.tsukuba.wide.ad.jp/software/apache//ant/binaries/apache-ant-1.9.4-bin.tar.gz
tar zvxf apache-ant-1.9.4-bin.tar.gz
mv apache-ant-1.9.4 /usr/local/
cd /usr/local/
ln -s apache-ant-1.9.4/ ant
export ANT_HOME=/usr/local/ant
export PATH=$ANT_HOME/bin:$PATH

で、完了です

最新版をインストールしたいのとyumからだとインストールが難しいのでバイナリファイルを配置してインストール完了です
ant -version とすればバージョンを確認できるかと思います

実行しているantコマンド内でJAVA_HOMEを設定しているようなので意図的にexportする必要はないと思いますが、「JAVA_HOMEがない」とエラーが怒られるようであればJAVA_HOMEをexportしてあげてください

Tips

ant実行時に文字化けするようであれば適当なエンコードを指定してから実行してみてください

export ANT_OPTS=-Dfile.encoding=UTF-8 && ant

それでも「unmappable character for encoding UTF-8」とか出る場合はファイル自体の文字コードがUTF-8になっているか確認してみてください

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 に記載しているため)
といった感じで今回は解決できました
正直バットノウハウ過ぎますが、念のためメモしておきます

2013年8月15日木曜日

Windowsにantをインストール

■環境
Windows Server 2008R2
ant 1.9.2

■インストール方法
以下からインストーラをダウンロード
http://ftp.tsukuba.wide.ad.jp/software/apache/ant/binaries/apache-ant-1.9.2-bin.zip
※上記にファイルが存在しない場合は http://ftp.tsukuba.wide.ad.jp/software/apache/ant/binaries/ にアクセスして最新版のzipファイルをダウンロードしてください

解凍後「apache-ant-1.9.2」フォルダを「ant」に変換し「C:/」直下に移動する

コントロール パネル→システムとセキュリティ→システム→システムの詳細設定
から環境変数に以下を追加する

ANT_HOME=C:\ant

ANT_HOMEを追加したらPATHに

%ANT_HOME%\bin;

を追加する

コマンドプロンプトを開いて以下のコマンドが実行されるか確認する

ant

build.xmlがないというエラーが表示されれば動作していることになります
またJavaのインストールおよびJAVA_HOMEが設定されていないと動作しないので未インストールの場合は合わせてインストールしてください

※Lhaplusで解凍するとエラーが出まくってうまく解凍してくれません
他の解凍ツールで実施しましょう
解凍に失敗するとant.batが0byteの空ファイルになっていました

■参考サイト

2012年10月14日日曜日

【Ant】Wicketプロジェクトからwarファイルを作成するbuild.xml

<?xml version="1.0" encoding="Shift_JIS"?>
<project name="war_test" default="create_run_war" basedir=".">

 <property name="app" value="war_test" />
 <property name="dir.src" value="WEB-INF/src" />
 <property name="dir.lib" value="WEB-INF/lib" />
 <property name="dir.dest" value="WEB-INF/classes" />
 <property name="javac" value="C:/user/java/6/bin/javac" />

 <path id="classpath.war_test">
  <fileset dir="${dir.lib}" includes="*.jar" />
 </path>

 <target name="clean_war">
  <echo message="warファイルを削除します。" />
  <delete file="${app}.war" />
 </target>

 <target name="clean_folder" depends="clean_war">
  <echo message="ビルドに必要なフォルダを削除します。" />
  <delete dir="WEB-INF/classes" />
 </target>

 <target name="create_folder" depends="clean_folder">
  <echo message="ビルドに必要なフォルダを作成します。" />
  <mkdir dir="WEB-INF/classes" />
 </target>

 <target name="copy_resource" depends="create_folder">
  <echo message="リソースファイルをコピーします。" />
  <copy includeemptydirs="false" todir="${dir.dest}">
   <fileset dir="${dir.src}/resource" />
  </copy>
  <copy includeemptydirs="false" todir="${dir.dest}">
   <fileset dir="${dir.src}">
    <include name="**/*.html" />
   </fileset>
  </copy>
 </target>

 <target name="compile" depends="copy_resource">
  <echo message="ソースコードコンパイルします。" />
  <javac srcdir="${dir.src}" destdir="${dir.dest}" executable="${javac}" debug="on" debuglevel="lines,vars,source" optimize="off" deprecation="on" encoding="UTF-8" includeAntRuntime="off">
   <exclude name="resource/" />
   <classpath refid="classpath.war_test" />
  </javac>
 </target>

 <target name="create_run_war" depends="compile">
  <echo message="warファイルを作成します。" />
  <war destfile="${app}.war" webxml="WEB-INF/web.xml">
   <fileset dir="" excludes="**/web.xml" />
  </war>
 </target>

</project>

ポイントはHTMLやらプロパティやらをコピーするところとWEB-INF/classes配下にclassファイルを配置するところでしょうか
前回にwarファイルを作成するbuild.xmlを紹介したのですが、実はあれだけだと本当にwarしかできなく動作しないので、注意してくださいw
Javaのパスは適宜変更して使用してください

2012年10月12日金曜日

【Ant】warファイルを作成するbuild.xmlをつくってみた

<?xml version="1.0" encoding="Shift_JIS"?>
<project name="war_test" default="create_run_war" basedir=".">

 <property name="app" value="war_test" />

 <target name="clean_war">
  <echo message="warファイルを削除します。" />
  <delete file="${app}.war" />
 </target>

 <target name="create_run_war" depends="clean_war">
  <echo message="warファイルを作成します。" />
  <war destfile="${app}.war" webxml="WEB-INF/web.xml">
   <fileset dir="" excludes="**/web.xml" />
  </war>
 </target>

</project>

もともとantには「war」というwarファイルを作成するためのタスクが用意されているので、簡単にできました。
環境はeclipse環境となります。

これでwarのプロジェクトもJenkinsと連携して動かすことができそうです。

2012年8月12日日曜日

【Ant】javacでコンパイルしてclassファイルを作成した後にそのclassファイルを元にJarファイルを作成するbuild.xmlを作ってみた その2

四の五の言わずまずはソースから

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project default="create_run_jar" name="Create Runnable Jar for Project smxFilter">
 <!--this file was created by Eclipse Runnable JAR Export Wizard-->
 <!--ANT 1.7 is required                                        -->

 <property name="jarname" value="Test.jar" />
 <property name="dir.src" value="src" />
 <property name="dir.lib" value="lib" />
 <property name="dir.dest" value="dest/bin" />
 <property name="javac" value="C:/user/java/6/bin/javac" />

 <path id="classpath.smx">
  <fileset dir="${dir.lib}" includes="*.jar" />
 </path>

 <target name="clean">
  <echo message="コンパイル先ディレクトリを削除します" />
  <delete dir="${dir.dest}" />
 </target>

 <target name="mkdir" depends="clean">
  <echo message="コンパイル先ディレクトリを作成します" />
  <mkdir dir="${dir.dest}" />
 </target>

 <target name="compile" depends="mkdir">
  <echo message="コンパイルを行います" />
  <javac srcdir="${dir.src}" destdir="${dir.dest}" executable="${javac}" debug="on" debuglevel="lines,vars,source" optimize="off" deprecation="on" encoding="UTF-8" includeAntRuntime="off">
   <classpath refid="classpath.smx" />
  </javac>
 </target>

 <target name="create_run_jar" depends="compile">
  <echo message="Jarファイルを作成します" />
  <jar destfile="${jarname}" filesetmanifest="mergewithoutmain">
   <manifest>
    <attribute name="Main-Class" value="Main" />
    <attribute name="Class-Path" value="." />
   </manifest>
   <fileset dir="${dir.dest}" />
   <zipgroupfileset dir="${dir.lib}" includes="*.jar"/>
  </jar>
 </target>

</project>

今回のポイントは以下
  • サードバーティのJar(俗にいうところのJarライブラリ)も一緒に含めてJarファイルを作成(俗にいうところの実行可能Jarファイル)
  • Tomcatプロジェクトじゃない(笑)

ちなみに前回はこちら
http://kakakikikeke.blogspot.com/2012/07/antjavacclassclassjarbuildxml.html
この2つがあれば大抵のことは実現できる・・・のかw

P.S
実行可能Jarファイルとして作成したいときにはMain-Classのvalueの値をパッケージ名付きの言わばフルパスで記載する必要があります

2012年7月11日水曜日

【Ant】javacでコンパイルしてclassファイルを作成した後にそのclassファイルを元にJarファイルを作成するbuild.xmlを作ってみた

四の五の言わずまずはソースから

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project default="create_run_jar" name="Create Runnable Jar for Project Hoge">
 <!--this file was created by Eclipse Runnable JAR Export Wizard-->
 <!--ANT 1.7 is required                                        -->

 <property name="jarname" value="Hoge.jar" />
 <property name="dir.src" value="WEB-INF/src" />
 <property name="dir.dest" value="dest/bin" />
 <property name="dir.from.resources" value="resources" />
 <property name="dir.to.resources" value="WEB-INF/classes" />
 <property name="compiler" value="C:/user/java/6/bin/javac" />
 <property name="dir.compiler" value="WEB-INF/lib" />
 <property name="dir.compiler.tomcat" value="C:/user/tomcat/6.0/lib" />

 <path id="classpath.hoge">
  <fileset dir="${dir.compiler}" includes="*.jar" />
  <fileset dir="${dir.compiler.tomcat}" includes="*.jar" />
 </path>

 <target name="copy_resources">
  <echo message="リソースファイルをコピーします(Tomcat起動用)" />
  <copy todir="${dir.to.resources}">
   <fileset dir="${dir.from.resources}">
   </fileset>
  </copy>
 </target>

 <target name="clean" depends="copy_resources">
  <echo message="コンパイル先ディレクトリを削除します" />
  <delete dir="${dir.dest}" />
 </target>

 <target name="mkdir" depends="clean">
  <echo message="コンパイル先ディレクトリを作成します" />
  <mkdir dir="${dir.dest}" />
 </target>

 <target name="compile" depends="mkdir">
  <echo message="コンパイルを行います" />
  <javac srcdir="${dir.src}" destdir="${dir.dest}" executable="${compiler}" debug="on" debuglevel="lines,vars,source" optimize="off" deprecation="on" encoding="UTF-8" includeAntRuntime="off">
   <classpath refid="classpath.hoge" />
  </javac>
 </target>

 <target name="create_run_jar" depends="compile">
  <echo message="Jarファイルを作成します" />
  <jar destfile="${jarname}" filesetmanifest="mergewithoutmain">
   <manifest>
    <attribute name="Main-Class" value="Hoge" />
    <attribute name="Class-Path" value="." />
   </manifest>
   <fileset dir="${dir.dest}" />
  </jar>
 </target>

</project>

上記何をしているかタグごとに上から説明します
処理的にも順次上から実行している流れになっています

propertyタグ
定数的なものを宣言しておりますここで宣言したものは${hoge}という形で参照することができます

pathタグ
コンパイル(javac)を行う際に必要になるライブラリを指定します

target(name="copy_resources")タグ
設定ファイルをコピーしています
実はTomcat用でWEB-INF/classes配下にプロパティファイルがないとTomcatは見えないのでそこにコピーしてあげています
(今回の趣旨とは少しことなるので無視でいいかもしれません)

target(name="clean")タグ
javacをしてできたクラスファイルを出力する先のディレクトリを削除します
このあとで作成するのですが、なぜ一旦削除するかというと前に作ってclassファイルとかが残っているとjarファイルを作成するときに前のclassファイルを参照してしまう可能性があるので一旦消しています

target(name="mkdir")タグ
javacをしてできたクラスファイルを出力する先のディレクトリを作成します

target(name="compile")タグ
javacを実行します
javacを実行する実際のソースコードがある箇所とそのソースをコンパイルするために必要になるクラスパスのオプションタブを追加しています
クラスパスの設定がうまくいっていない場合はこのコンパイル部分でこけると思います
javacのオプションをいろいろ設定していますが、詳しくは調べてくださいw
大事なのは
encoding="UTF-8" includeAntRuntime="off"
の2つだと思います

target(name="create_run_jar")タグ
コンパイルしてできたclassファイルを元にjarファイル作成します


とまぁbuild.xmlの説明は以上で、こんな感じでjarファイルを作成することはできます
(プロパティファイルのコピーはいらないかもこの中では特殊な制御なのでいらないと思います)

で今回一番ハマったのが、build.xmlをeclipseから実行してantのjavacタグでのコンパイル時に


エラー: \65279は不正な文字です

が出る場合があります
原因はBOM付きのUTF-8で保存されているせい(eclipseのせいなのかなー・・・)
ネットで調べるとWindowsのメモ帳で編集するとBOMがついてしまうそうですがメモ帳で編集した記憶などはない・・・
とりあえずこれを消す方法は
TeraPad
を使います
ファイル→文字/改行コード指定保存
で「UTF-8N」を選択して上書き保存します。どうやらこれで保存するとBOMなしのUTF-8で保存できるようです
eclipse上だけではこれを回避するのは難しいようです