【问题标题】:java classpath issues when starting Cooja启动 Cooja 时的 java 类路径问题
【发布时间】:2018-07-06 16:30:50
【问题描述】:

我必须在 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/tools/cooja.

【问题讨论】:

  • 你构建的文件是什么样的?
  • 它是:link
  • 我也试过运行这个:user@ubuntu:~/contiki_copy/tools/cooja$ ant -lib /home/user/contiki_copy/tools/cooja/lib/jcommon-1.0.14.jar -lib /home/user/contiki_copy/tools/cooja/lib/jfreechart-1.0.11.jar run_bigmem 没有任何改变..

标签: java ant classpath packages


【解决方案1】:

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

【讨论】:

  • 您能更深入地解释一下自己吗?你的意思是运行这样的东西:user@ubuntu:~/contiki_copy/tools/cooja$ ant -lib /home/user/contiki_copy/tools/cooja/lib/jcommon-1.0.14.jar -lib /home/user/contiki_copy/tools/cooja/lib/jfreechart-1.0.11.jar run_bigmem?
  • @user1405417 - 不,我的意思是,修复你的构建文件。如果您在命令行或 shell 环境中执行此操作,则说明您做错了。
  • @user1405417 - 在“运行”目标中,no 提到了 jfreechart jar。也许我遗漏了一些东西(不是蚂蚁专家),但是这应该如何工作?
  • aaahn 我现在明白了,我现在编辑了帖子..我正在使用“run_bigmem”目标,正如你现在所看到的那样。如您所见,在 tis 范围内有两个罐子。
  • @user1405417 - 我想我也说错了。错误出现在 compile 步骤中。该目标是您缺少相关罐子的地方。此外,“run_bigmem”目标也没有罐子,只有“runfree”。
【解决方案2】:

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

比如你这样启动cooja:

ant run

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

ant run_bigmem

您需要编辑“run_bigmem”目标。

另外,还要确保正确编辑“编译”目标,否则编译会失败,很多导入也会失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多