从bash文件运行多类java程序?

时间:2017-08-13 20:55:41

标签: java bash unix

我有一个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文件。

我该如何解决这个问题?

2 个答案:

答案 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如何使用各种选项执行此操作,具体取决于您的项目结构