2017-02-07 18 views
0

У меня есть 2 основные programs.first один называется ext.java и второй один называется send.java .content, который будет опубликован находится в файле с именем data
Вызов RabbitMQ издатель из кода Java

  • Первая программа Java открывает командной строки и выполняет вторую программу java .
  • Вторая java-программа затем публикует содержимое файла для очереди на сервере rabbitmq .

Я использую функцию библиотеки apache commons FileUtils.readFileToString(file,format) для чтения файла.
Когда я запускаю send.java qname filepath из командной строки, он толкает содержимое.
Но когда я взываю же от ext.java программы, передавая заданы параметры командной строки (что в проекте Eclipse), он бросает исключение следующим образом:

java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils 

Переменные окружения все установленные properly.Here являются файлы кода.

ext.java

public static void main(String[] args) throws IOException {  
     File f = new File("C:\\Users\\Pradeep\\Desktop\\pros\\externalJava\\data");     
     Runtime.getRuntime().exec("cmd.exe /c start java send f0 "+f.getAbsolutePath()); 
    } 

send.java

import com.rabbitmq.client.*; 
import org.apache.commons.io.*; 
import java.io.File; 

public class send { 

    public static void main(String[] argv) throws Exception { 
    ConnectionFactory factory = new ConnectionFactory(); 
    factory.setHost("localhost"); 
    Connection connection = factory.newConnection(); 
    Channel channel = connection.createChannel(); 
    File f = new File(argv[1]); 
    String message = FileUtils.readFileToString(f,"UTF-8"); 
    channel.basicPublish("", argv[0], null, message.getBytes("UTF-8")); 

    channel.close(); 
    connection.close(); 
    } 
} 

ответ

1

Вам нужно будет указать classpath, а также для того, чтобы указать на JVM, где искать FileUtilsrabbitmq связанные классы). Здесь у вас есть соответствующая документация https://docs.oracle.com/javase/tutorial/essential/environment/paths.html

Другим способом было бы создать исполняемый файл JAR, чтобы путь к классам был включен в файл манифеста JAR, в результате чего нет необходимости указывать путь класса в CLI. Было бы побежал, как java -jar Executable.Jar

Так попробуйте это:

Runtime.getRuntime().exec("cmd.exe /c start java -cp PathToYourLibraries send f0 "+f.getAbsolutePath()); 

Он работает с eclipse, поскольку он устанавливает правильный путь к классам прозрачно для пользователя - добавляет все записи из libraries к классам, а также путь к скомпилированных классов ,

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

  • Нет связанных вопросов^_^