gpt4 book ai didi

java - 从java代码调用rabbitmqpublisher

转载 作者:行者123 更新时间:2023-12-01 08:54:53 25 4
gpt4 key购买 nike

我有 2 个基本程序。第一个名为 ext.java,第二个名为 send.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

环境变量都设置正确。这是代码文件。

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();
}
}

最佳答案

您还需要指定classpath,以便将JVM指向在哪里查找FileUtils(以及rabbitmq相关类) )。这里有相关文档https://docs.oracle.com/javase/tutorial/essential/environment/paths.html

另一种方法是创建可执行的 JAR,这样类路径将包含在 JAR 的 list 文件中,从而无需在 CLI 上指定类路径。它将像 java -jar Executable.Jar

一样运行

所以试试这个:

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

它在eclipse中工作,因为它对用户透明地设置正确的类路径 - 将中的所有条目添加到类路径以及编译类的路径。

关于java - 从java代码调用rabbitmqpublisher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42095138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com