启动Cooja时出现java classpath问题

时间:2013-02-22 16:44:24

标签: java ant classpath packages

我必须在Ubuntu 12.04下运行着名的基于Java的Cooja模拟器,扩展了我已经制作的一些类。在我的java文件中,我记得jfreechart包:

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.chart.axis.ValueAxis;  

我用这个命令运行模拟器:
$ ant run_bigmem

然后弹出一些例外:

compile:
[javac] Compiling 44 source files to /home/user/contiki_copy/tools/cooja/build
[javac] /home/user/contiki_copy/tools/cooja/java/se/sics/cooja/plugins/sixlowpan_metrics/Chart.java:7: error: package org.jfree.chart does not exist
[javac] import org.jfree.chart.ChartFactory;
[javac]                       ^
[javac] /home/user/contiki_copy/tools/cooja/java/se/sics/cooja/plugins/sixlowpan_metrics/Chart.java:8: error: package org.jfree.chart does not exist
[javac] import org.jfree.chart.ChartPanel;
[javac]                       ^
[javac] /home/user/contiki_copy/tools/cooja/java/se/sics/cooja/plugins/sixlowpan_metrics/Chart.java:9: error: package org.jfree.chart does not exist
[javac] import org.jfree.chart.JFreeChart;

 .
 .
 .
 and so on..  

然后我修改了文件: /home/user/.bashrc ,我添加了以下几行:

export CLASSPATH=.:/home/user/contiki_copy/tools/cooja/lib/jfreechart-1.0.11.jar:/home/user/contiki_copy/tools/cooja/lib/jcommon-1.0.14.jar  

然后,在提示符下输入:
$ echo $ CLASSPATH 查看环境变量是否输入正确,实际上我得到了:

user@ubuntu:~/contiki_copy/tools/cooja$ echo $CLASSPATH 
.:/home/user/contiki_copy/tools/cooja/lib/jfreechart-1.0.11.jar:/home/user/contiki_copy/tools/cooja/lib/jcommon-1.0.14.jar

尽管所有这些努力没有任何改变,我仍然得到错误..不知道该做什么,真的,任何想法?

我想 build.xml 文件的关键部分如下:

<target name="run_bigmem" depends="init, compile, jar, copy configs">
<java fork="yes" dir="${build}" classname="se.sics.cooja.GUI" maxmemory="1536m">
  <arg line="${args}"/>
  <env key="LD_LIBRARY_PATH" value="."/>
  <classpath>
<pathelement path="${build}"/>
    <pathelement location="lib/jdom.jar"/>
    <pathelement location="lib/log4j.jar"/>
    <pathelement location="lib/jsyntaxpane.jar"/>
<pathelement location="lib/jfreechart-1.0.11.jar"/>
    <pathelement location="lib/jcommon-1.0.14.jar"/>
  </classpath>
</java>

我在目录中的所有jar: / home / user / contiki_copy / tools / cooja / lib ,我正在运行目录中的所有内容: / home / user / contiki_copy /工具/ cooja

2 个答案:

答案 0 :(得分:0)

您需要在蚂蚁“编译”目标中包含所有相关的jar(就像在“runfree”目标中一样)。最有可能的是,您可以在各种目标之间共享一组通用的库。很确定你可以用蚂蚁这个,但我自己并不熟悉它。

答案 1 :(得分:0)

最终解决方案:
解决此问题的唯一方法是通过build.xml文件。很明显 ant并不关心java classpath env-var 。编辑构建文件时,请确保将项目所需的jar放在正确的“目标”中,甚至放在xml文件的“compile”目标中。

例如,如果你以这种方式启动cooja:

ant run

您需要编辑构建文件的目标“run”。如果以其他方式启动模拟器:

ant run_bigmem

您需要编辑“run_bigmem”目标。

此外,确保正确编辑“编译”目标,否则编译将失败,许多导入也会失败。