外部ソースへのリンクを含むソースのbuild.xmlの書き方は?

このQ&Aのポイント
  • Eclipseで2つのプロジェクト(Lib、Tool)のビルドについて、build.xmlの書き方とエラー解決方法を教えてください。
  • ToolプロジェクトはLibの内容を使用しており、ビルド時にLibのソースへのリンクを設定していますが、antを使用してビルドする方法を知りたいです。
  • 現在、build.xmlを実行するとLibの内容を参照する際にエラーが発生しています。エラーの解決方法を教えてください。
回答を見る
  • ベストアンサー

外部ソースへのリンクを含むソースのbuild.xmlの書き方は?

現在、Eclipseで2つのプロジェクト(Lib、Toolとします)を作成しており、ToolはLibに定義された内容を用いています。 Toolは私の担当ですがLibは別の人が担当しており、まだ内容変更の可能性があるため、ソースのコピーはせず、Toolのプロジェクトの設定にて、Libのソースへのリンクを設定しました。 これでToolの(Eclipseのメニューによる)ビルドはできるようになったのですが、これをantでビルドしたいとき、build.xmlをどのように書けばよいのかわからず困っています。 Toolのビルドに先立ってLibをビルドしたいですが、Tool側にソースがないのでbuild.xmlにどう書けばよいのやら・・・という状態です。 (できるだけ「自分の環境でしか動かない」という書き方はしたくないですし。) どなたか、何かご存知ないでしょうか? 皆様の知識やお知恵を貸していただければと思います。 以下にbuild.xmlの一部を抜粋します。 ----------------------------------- <?xml version="1.0" encoding="utf-8"?> <project name="tool" basedir="."> <!-- ====================================================== --> <!-- set properties for this build --> <!-- ====================================================== --> <property name="bin" value="bin"/> <property name="dist" value="dist"/> <property name="src" value="WEB-INF/src" /> <property name="lib" value="WEB-INF/lib" /> <!-- ====================================================== --> <!-- make WAR --> <!-- ====================================================== --> <target name="compile" depends="init"> <!-- compile --> <javac srcdir="${src}" destdir="${bin}" includes="hoge/tool/*.java, hoge/util/*.java"> <classpath> <fileset dir="${lib}"> <include name="*.jar"/> </fileset> </classpath> </javac> <!-- make jar --> <jar destfile="${dist}/tool.jar" basedir="${bin}" update="true"> </jar> <!-- make war --> <war destfile="${dist}/tool.war" webxml="WEB-INF/web.xml"> <fileset dir="." includes="index.jsp, error.jsp"/> <lib dir="${lib}" includes="*.jar"/> <lib dir="${dist}" includes="tool.jar"/> <classes dir="${src}" includes="log4j.xml"/> </war> </target> ----------------------------------- このままantを実行すると、Libの内容を参照している箇所でパッケージが見つからないとかシンボルが解決できないといったエラーが出ます。 以下にエラーを抜粋します。 ----------------------------------- Buildfile: C:\eclipse_workspace\Tool\build.xml init: compile: [javac] Compiling 9 source files to C:\eclipse_workspace\Tool\bin [javac] C:\eclipse_workspace\Tool\WEB-INF\src\hoge\tool\Decoder.java:3: パッケージ hoge.lib は存在しません。 [javac] import hoge.lib.HogeException; [javac] ^ (以下省略) -----------------------------------

  • SSMSE
  • お礼率25% (17/67)
  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

こんにちわ。 先にlibをコンパイルすればいいように思います。 ただ、どの環境でも動くというのは難しいと思います。 libとtoolの両ソースが存在しないと駄目ですし、、、。 それより、折角プロジェクトが分かれてるのだから、libの人にjarとしてライブラリをリリースしてもらい、それを使ってtoolのコンパイルをするとか。。。 でないとlibの人がいじってる途中のソースをコンパイルしてしまうかもしれませんよね。

SSMSE
質問者

お礼

やはり、Lib側でビルドして(JARを作って)もらって・・・というのが一番妥当な解決方法なのですね。 担当者と話し合って、この方法を採れるようにしようと思います。 有難うございました。

関連するQ&A

  • antでのbuild.xml記述が理解できません

    jakarta antを使用していますが、build.xmlにて、以下のような記述が出てきました。この中で**の部分が何を意味しているのか、分かりません。 <include name="**/*.jar" /> javacタスクの中の記述ですが、**/*.jarの最初の**が何を意味しているのか分かりません。 また、以下のjarタスクの最後の部分の*Bean*の意味も分かりません。。。 <jar jarfile="${build.lib}/sample-ejb-client.jar" basedir="${build.classes}" includes="sample/ejb/*" excludes="META-INF/ejb-jar.xml, sample/ejb/*Bean*"/> アスタリスクはワイルドカードなのかなといろいろ考えたのですが、回答がみつかりません。 誰か分かる方、教えてください。よろしくお願いします

    • ベストアンサー
    • Java
  • Antでのビルドにエラー

    いつも参考にさせて頂いています。 表題の件ですが、現在Eclipse3.1・struts1.2.9を使用しています。 Antでのコンパイルをしてみたのですが、コンパイルエラーになります。 ■エラー内容 シンボルを解決できません。 [javac] シンボル: クラス LookupDispatchAction LookupDispatchActionを継承しているクラスでは確かにインポートしています。(インポートしていないとエラーになると思うのですが、ソース上でエラーは出ていません) ■build.xmlの中身 <?xml version="1.0" encoding="UTF-8" ?> <project name="aaa" default="compile" basedir="."> <property name="srcdir" value="JAR" /> <!-- JARディレクトリの作成--> <target name="mkdir"> <mkdir dir="${srcdir}" /> </target> <!-- コンパイル --> <target name="compile" depends="mkdir"> <javac srcdir="javaSource" destdir="${srcdir}" excludes="build.xml" /> </target> </project> 何かbuild.xml上でstrutsライブラリのパスとかを指定しないと認識してくれないのでしょうか? どうかご教授宜しくお願いします。

    • ベストアンサー
    • Java
  • antコマンドを、通常のunixコマンドへの変換

    antコマンドを、通常のunixコマンドへの書き下し方法をご教授下さい。 antの構文の定義については知識習得できるものの、 通常のコマンド形式への書き下しについては見当たらず困っています。 下記のant実行形式(build.xml)ファイルを通常のunixコマンドに書き下すとどのようになりますか? もしくは、書き下すための良いサイトの検索方法などありましたらご教授頂けると幸いです。 例えばjavac に関してもオプションとして sourceは見当たるものの、destdirとclasspathrefについてはどのようにオプションに追加すべきかわかりません。 なお、${シンボル名} はちゃんと事前に定義されたものに置き換えられますので、簡易的に記述して頂いて問題ありません。 build.xml全文:https://www.dropbox.com/s/ht9cre199ic0ru6/build.xml?dl=0 112行目 <target name="cvc3" depends="configure-cvc3,check-config.status" unless="config.status.present"> <exec dir="../cvc3" executable="/usr/bin/make"/> <copy file="../cvc3/java/lib/${cvc3.jar}" todir="${lib.dir}" /> </target> cvc3フォルダにて $ /usr/bin/make $ copy ../cvc3/java/lib/libcvc3-3.0.0.jar 119行目 <target name="compile-tests" depends="jar"> <mkdir dir="${build.dir}/test"/> <javac srcdir="${test.dir}" destdir="${testClasses.dir}" classpathref="junit-classpath"/> </target> cvc3フォルダにて(?) $ mkdir ${build.dir}/test $ javac [オプション不明] 126行目 <target name="test" depends="compile-tests"> <junit fork="yes"> <env key="LD_LIBRARY_PATH" path="../cvc3/java/lib:../cvc3/lib" /> <classpath refid="junit-classpath"/> <batchtest> <formatter type="plain" usefile="false" /> <fileset dir="${testClasses.dir}"> <include name="**/*Test.class" /> <exclude name="**/RhinoTest.class"/> <exclude name="**/Cvc3Test.class"/> </fileset> </batchtest> </junit> </target> 141行目 <target name="test-rhino" depends="compile-tests" description="See some Rhino return values"> <junit> <classpath refid="junit-classpath"/> <batchtest> <formatter type="plain" usefile="false" /> <fileset dir="${testClasses.dir}"> <include name="**/RhinoTest.class"/> </fileset> </batchtest> </junit> </target> 154行目 <target name="test-cvc3" depends="compile-tests" description="Make sure that cvc3 runs properly"> <junit fork="yes"> <env key="LD_LIBRARY_PATH" path="../cvc3/java/lib:../cvc3/lib" /> <classpath refid="junit-classpath"/> <batchtest> <formatter type="plain" usefile="false" /> <fileset dir="${testClasses.dir}"> <include name="**/Cvc3Test.class"/> </fileset> </batchtest> </junit> </target> </project>

  • eclipseとantのコンパイル結果が異なる件について。

    eclipseとantのコンパイル結果が異なる件について。 coberturaの導入を検討してい原因が分からず困っています。 困っているのはcobertura自体ではなく、antでコンパイルしたクラスファイルがどうもおかしいのです。 ※antはdos上ではなく、eclipseで行いましたが、dosでも同様のようでした。 eclipseでコンパイルしたクラスファイルの半分弱のサイズになっています。 本来は同じものになるのを期待していたのですが・・・。もちろん何か私の設定ミスだと思いますので、アドバイス頂けないでしょうか。 クラス1 package sample; import java.util.Date; public class Sample1 { public void func() { Date d = new Date(); if ((d.getTime() % 2) == 0) { System.out.println("true"); } else { System.out.println("false"); } } } クラス2 package sample; import junit.framework.TestCase; public class Sample1Test extends TestCase { public void testFunc() { Sample1 s = new Sample1(); s.func(); } } build.xml(文字数の関係でコンパイルに関係ない箇所は省きました) <?xml version="1.0" encoding="Shift_JIS"?> <project name="javahelloant" default="clean" basedir="./"> <!-- プロパティ 開始 --> <!-- libがあるディレクトリ --> <property name="lib.dir" value="lib"/> <!-- ソースファイルがあるディレクトリ --> <property name="src.dir" value="src"/> <property name="test.dir" value="test"/> <!-- クラスファイルの出力先ディレクトリ --> <property name="classes.dir" value="bin"/> <property name="classes-test.dir" value="bin-test"/> <!-- プロパティ 終了 --> <!-- パス 開始 --> <path id="classpath"> <fileset dir="${lib.dir}"> <include name="**/*.jar" /> </fileset> <pathelement location="${classes.dir}"/> </path> <!-- パス 終了 --> <!-- ターゲット 開始 --> <!-- コンパイル --> <target name="compile"> <javac srcdir="${src.dir}" destdir="${classes.dir}" /> <javac srcdir="${test.dir}" destdir="${classes-test.dir}" classpathref="classpath" /> </target> </project>

    • ベストアンサー
    • Java
  • eclipseでantを実行すると

    build.xml: <?xml version="1.0" encoding="UTF-8"?> <project name="example" default="compile" basedir="./"> <property name="compile" value="Classes"/> <target name="directory"> <mkdir dir="${compile}"/> </target> <target name="compile" depends="directory"> <javac srcdir="src" destdir="${compile}" excludes="build.xml"/> </target> </project> に対して Buildfile: /root/workspace/javatest/build.xml directory: compile: [javac] Compiling 2 source files to /root/workspace/javatest/Classes BUILD FAILED /root/workspace/javatest/build.xml:8: Unable to find a javac compiler; com.sun.tools.javac.Main is not on the classpath. Perhaps JAVA_HOME does not point to the JDK. It is currently set to "/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre" Total time: 795 milliseconds というエラーがでました。 ちなみに /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/bin/javac がなかったので /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/bin/javac を配置しましたがエラーメッセージは同じです。 (実際にはjavacのシンボリックリンクを配置) どうすれば解決出きるでしょうか?

    • ベストアンサー
    • Java
  • AntでのJunitの試験

    Antのbuild.xmlを下記のように記述して、Ant unit-testを実行させると、下記の[junit]の試験がFAILEDになってしまいます。これと同じJunitの試験はEclipse上のJunitの試験ではパスしていますので、Javaのテストプログラムそのものには間違いはありません。(同じファイルを使っています。) レポートファイルのエラーを見てみると、initializationErrorで、 org/hamcrest/SelfDescribing java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:800) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) Caused by: java.lang.ClassNotFoundException: org.hamcrest.SelfDescribing at java.lang.ClassLoader.loadClass(ClassLoader.java:358) のようなエラーをはいていますが、理由が分かりかねています。 Antは、apache-ant-1.9.2、Junitは、juint-4.11.jarを使っています。 多分、下記xmlファイルの<junit>の書き方の問題ではないかと思うのですが、 AntのJunitの試験に詳しい方でお分かりになる方ございましたらアドバイスをお願いします。 <?xml version="1.0" encoding="UTF-8"?> <project> <property name="output" value="build/output"/> <target name="compile"> <mkdir dir="${output}/classes"/> <javac srcdir="src" destdir="${output}/classes"/> </target> <target name="unit-test" depends="compile"> <path id="for-unit-test"> <pathelement location="${output}/classes"/> <pathelement location="${output}/test-classes"/> <pathelement location="build/lib/junit-4.11.jar"/> </path> <mkdir dir="${output}/test-result"/> <mkdir dir="${output}/test-classes"/> <javac srcdir="test/src" destdir="${output}/test-classes"> <classpath refid="for-unit-test"/> </javac> <junit> <classpath refid="for-unit-test"/> <batchtest todir="${output}/test-result"> <fileset dir="test/src"> <include name="**/*Test.java"/> </fileset> <formatter type="xml"/> </batchtest> </junit> <junitreport todir="${output}/test-result"> <fileset dir="${output}/test-result"> <include name="TEST-*.xml"/> </fileset> <report format="frames" todir="${output}/test-result/report"/> </junitreport> </target> </project>

    • ベストアンサー
    • Java
  • XML.XSLT

    自分で解決ができないので、少し聞かせてください。 質問は、XMLを利用して、XSLTの出力です。 まずは、サンプルでの実装を確認しようと思いまして、 http://www.hellohiro.com/xslt.htm のサイト利用させていただいております。 それで、サイトの説明通り、 http://java.sun.com/xml/downloads/javaxmlpack.html から、java_xml_pack-summer02_01.zipをダウンロードして、xalan.jar、jaxp-api.jar、dom.jar、sax.jar、xercesImpl.jarを配置しました。配置内容は、まず、 C:\jdk1.3\jre\lib\ext に配置しました。そして、サーバアプリは、JRun3.0を使用してますので、C:\Program Files\Allaire\JRun\lib\ext に配置しました。余談になると思うのですが、toolで、forte for java2.0を使っているので、C:\forte4j\lib\extにも配置しました。そして、上記サイトの下方の「サーブレットを利用しての表示」のコードをコンパイルは成功したのですが、ブラウザからの呼び出しでは、真っ白な表示になってしまいます。 自分では、CLASSPATHに問題があるのでは?と思い、いろいろ試したのですがダメです。ちなみに、autoexec.batには、 SET PATH=c:\jdk1.3\bin;%PATH% SET CLASSPATH=.;C:\jdk1.3\jre\lib\ext\xalan.jar;C:\jdk1.3\jre\lib\ext\jaxp-api.jar;C:\jdk1.3\jre\lib\ext\sax.jar;C:\jdk1.3\jre\lib\ext\domjar としています。 どこの設定が間違っているのか、助言をください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 外部jarへのパスの通し方

    はじめまして。パスの通し方について教えてください。 javaを勉強しようと、 j2sdk1.4.1_04 jakarta-log4j-1.2.8 tomcat_5.0.16 eclipse2.1.1 をダウンロードして、環境を設定しようとしているところです。 しかし、外部jar(log4j、tomcat)を使用したSRCをコンパイルしようとしても、javax.servlet.httpが見つかりません等のエラーが出てしまいます。 eclipseでは、外部jarを取り込んでいるので、コンパイルが通って動作確認(log4jのみ)は済んでいます。 ただし、コマンドプロンプトからのコンパイルでは上記のようなエラーが出てしまいます。 PATHは JAVA_HOME: C:\j2sdk1.4.1_04 TOMCAT_HOME: C:\Program Files\Apache Software Foundation\Tomcat 5.0 LOG4J_HOME: C:\jakarta-log4j-1.2.8 CLASS_PATH .;%LOG4J_HOME%\dist\lib\log4j-1.2.8.jar;%TOMCAT_HOME%\common\lib\ant.jar;%TOMCAT_HOME%\common\lib\commons-collections.jar・・・ (C:\Program Files\Apache Software Foundation\Tomcat 5.0\common\lib\配下全てのjar) に設定してあります。(インストールは全てデフォルト、解凍するものはC直下に解凍してあります。eclipseも同様のものを外部jarとして取り込んであります。) 何か、根本的に間違っているのでしょうか? よろしくお願いします。 ★最終的には、MY_SQLを使用しservletからDBアクセスという環境を設定したいと思っています。 長文失礼しました。

  • .classpathファイルについて教えてください。

    javaを初めて日が浅い初心者です。eclipseを利用しています。 swt.jarとdllのパスを指定したいのですが.classpathファイルのxmlのフォーマット <classpathentry kind の "src" と "con" と "output" と "lib" が良くわかりません。 eclipseから設定できますか? 教えて頂けますか?(もしくは解説サイト)よろしくお願いします。

    • ベストアンサー
    • Java
  • ディレクトリ構成と意味不明なエラー…

    いつも参考にさせて頂いています。 JAVA初心者ですのでわかりやすくして頂けると幸いです。 今struts(1.2.4)を利用してEclipse(3.1)での開発を自宅で練習しています。サーバーはTomcat(4.1.31)を使用しています。Eclipse内のディレクトリ構成が +projectフォルダ | +---JREシステムライブラリ | +---servlet.jar | +---runtime.jar | +---WEB-INF/src |    |--- java.resources |    |--- build.xml +---struts.jar | +WEB-INF | +---××.jsp のようになっています。なんとなくめちゃくちゃになってるような気がするのですが…訂正箇所はありますでしょうか?(もしあれば訂正方法も教えて頂けると助かります。) そもそもWEB-INF/srcとWEB-INFはどう違うのかもわかりません…サイトを参考にしている(EclipseにTomcatプラグイン等を入れていると)とこうなってしまいました。 あとWEB-INFに×印がついてエラー表示されています(WEB-INF以下はlibフォルダとxmlファイル.tldファイルのみでクラス等はありません)。なぜコンパイルエラーはありえないのにエラーが出るのでしょうか…わかりにくい説明かもしれませんが宜しくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう