我有一个bash文件,应该在我睡觉时重复运行这个java程序进行数据收集。
这是bash文件:
#!/bin/bash
javac Main.java
START=`date +%s`
while [ $(( $(date +%s) - 28800 )) -lt $START ]; do
java Main
done
当我从与Main.java文件相同的目录执行bash文件:./cache_script.sh
时,会发生以下错误:
Main.java:16: error: cannot find symbol
Entry[] entries = new Entry[DATA_SET_SIZE];
^
symbol: class Entry
location: class Main
Main.java:16: error: cannot find symbol
Entry[] entries = new Entry[DATA_SET_SIZE];
^
symbol: class Entry
location: class Main
Main.java:20: error: cannot find symbol
entries[i] = new Entry(999999999, 999999999, 99999999.9);
^
symbol: class Entry
location: class Main
Main.java:25: error: cannot find symbol
LruCache<Integer, Entry> lruCache = new LruCache<>(CAPACITY);
^
symbol: class LruCache
location: class Main
Main.java:25: error: cannot find symbol
LruCache<Integer, Entry> lruCache = new LruCache<>(CAPACITY);
^
symbol: class Entry
location: class Main
Main.java:25: error: cannot find symbol
LruCache<Integer, Entry> lruCache = new LruCache<>(CAPACITY);
^
symbol: class LruCache
location: class Main
6 errors
看起来bash解释器没有找到我的Main.java使用的Entry.java和LruCache.java文件。
我该如何解决这个问题?
答案 0 :(得分:2)
您需要另外指定类路径。为此,您需要添加&#34; -cp%FOLDER_WITH_CLASS_FILES%&#34;属于你的&#34; java Main&#34;致电
一般来说&#34; java&#34; call不知道它应该在哪里寻找LruCache,Entry和所有其他类。而classpath属性给出了这样的线索。
您可以在此处阅读有关classpath属性http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html
的更多信息答案 1 :(得分:1)
您应该在使用javac
进行编译时将所有使用过的类/ * jar添加到类路径中,然后使用java
命令运行。
请参阅此处:how to compile java package structures using javac如何使用各种选项执行此操作,具体取决于您的项目结构