2014-01-17 1 views
0

Я пытаюсь начать с API программного обеспечения java weka. Я написал следующий код для тестирования:Как скомпилировать java-программу с импортированными классами?

import weka.core.Instances; 
import java.io.BufferedReader; 
import java.io.FileReader; 

public class hello_weka { 
    public static void main(String[] args) throws Exception { 
     BufferedReader reader = new BufferedReader(new FileReader("/home/aljoscha/Masterarbeit/weka_examples/iris.arff")); 
     Instances data = new Instances(reader); 
     reader.close(); 
     // setting class attribute 
     data.setClassIndex(data.numAttributes() -1); 
     System.out.println(data); 
     System.exit(0); 
    } 
} 

Он отлично работает, когда я выполняю его в Eclipse. Однако я не могу заставить его работать в Терминале.

Я попытался предоставить путь .jar во время компиляции, а затем выполнить программу из каталога скомпилированного класса.

javac -cp /usr/share/java/weka.jar hello_weka.java 
java hello_weka 

Этот подход не работает, я получаю следующее сообщение об ошибке:

Exception in thread "main" java.lang.NoClassDefFoundError: weka/core/Instances at hello_weka.main(hello_weka.java:8) Caused by: java.lang.ClassNotFoundException: weka.core.Instances at java.net.URLClassLoader$1.run(URLClassLoader.java:217) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:321) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:266) ... 1 more

Что я делаю неправильно?

Я предполагаю, что я делаю только некоторые совершенно глупые вещи, так как я просто начинаю писать на Java. Если да, пожалуйста, извините меня и попробуйте сказать мне, как я могу сделать лучше.

Edit:

когда я пытаюсь вещь, предложенную в ответах, которые я получаю следующую ошибку:

Exception in thread "main" java.lang.NoClassDefFoundError: hello_weka Caused by: java.lang.ClassNotFoundException: hello_weka at java.net.URLClassLoader$1.run(URLClassLoader.java:217) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:321) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:266) Could not find the main class: hello_weka. Program will exit.

ответ

0

Я наконец нашел ответ: Ответ dunni почти правильно. Для меня это работает, если я предоставляю путь к классам как файла jar, так и файла класса, но разделяется :.

java -cp /usr/share/java/weka.jar:/home/aldorado/myjavascripts/ hello_weka 

Возможно ли, что это зависит от используемого ОС/JDK?

1

Попробуйте это:

java -cp /usr/share/java/weka.jar hello_weka

+0

Когда я это сделаю, я получаю еще одну ошибку. (см. отредактированный вопрос) – aldorado

+0

Есть некоторые проблемы с вашими зависимостями классов. Убедитесь, что вы предоставили правильный путь к файлу jar в вашем пути к классам (-cp) –

0

Вы должны предоставить classpath для вашего JAR также при выполнении программы:

java -cp /usr/share/java/weka.jar hello_weka 
1

Вы должны также добавить текущий каталог (где ваши собственные классы хранятся) к классам:

java -cp .;/usr/share/java/weka.jar hello_weka 
+0

Это выглядит как-то лучше, однако я получаю еще одну ошибку, похоже, это синтаксис. Нужно ли мне указывать каталог, содержащий собственный класс или сам класс? Я постараюсь это решить ... – aldorado

+0

Я нашел решение. Написал это ниже. – aldorado

Смежные вопросы