sách gpt4 ai đã đi

java - 运行 jar 时项目抛出 IOException(未找到文件)

In lại 作者:行者123 更新时间:2023-12-01 10:14:30 25 4
mua khóa gpt4 Nike

我使用 Eclipse 用 java 创建了一个项目。

这是项目结构:

nhập mô tả hình ảnh ở đây

当我在 Eclipse 中将项目作为 java 应用程序运行时,它运行得很好。

现在,我需要将其导出为 jar。因此,我使用此链接上的第三个答案中描述的方法创建了 jar(由 Fever 回答):

Failing to run jar file from command line: “no main manifest attribute”

Đây là jar tf EventLogger.jar 的输出:

META-INF/MANIFEST.MF
com/
com/project/
com/project/eventLogger/
com/project/eventLogger/KafkaConsumerGroup.class
com/project/eventLogger/KafkaProducer.class
com/project/eventLogger/ConsumeConfig.class
com/project/eventLogger/ConsumerThread.class
com/project/eventLogger/Formatter.class
com/project/eventLogger/Execute.class
com/project/eventLogger/Config.class
com/project/eventLogger/package-info.class
com/project/eventLogger/ProdConfig.class
com/project/eventLogger/FormatConfig.class
resources/
resources/Config.properties
resources/ConsumerConfig.properties
resources/FormatterConfig.properties
resources/ProducerConfig.properties
resources/log4j.properties

这是 list 文件:

Manifest-Version: 1.0
Built-By: vishrant
Class-Path: lib/json-simple-1.1.1.jar lib/junit-4.10.jar lib/hamcrest-
core-1.1.jar lib/kafka_2.9.2-0.8.2.2.jar lib/jopt-simple-3.2.jar lib/
kafka-clients-0.8.2.2.jar lib/log4j-1.2.16.jar lib/lz4-1.2.0.jar lib/
metrics-core-2.2.0.jar lib/slf4j-api-1.7.6.jar lib/snappy-java-1.1.1.
7.jar lib/slf4j-log4j12-1.6.1.jar lib/zkclient-0.3.jar lib/zookeeper-
3.4.6.jar lib/jline-0.9.94.jar lib/netty-3.7.0.Final.jar lib/scala-li
brary-2.9.2-RC3.jar
Build-Jdk: 1.8.0_74
Created-By: Maven Integration for Eclipse
Main-Class: com.project.eventLogger.Execute

并且,这是一个异常(exception):

java.io.FileNotFoundException: ConsumerConfig.properties (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.(FileInputStream.java:138)
at java.io.FileInputStream.(FileInputStream.java:93)
at com.project.eventLogger.ConsumeConfig.loadPropertiesFile(ConsumeConfig.java:34)
at com.project.eventLogger.ConsumeConfig.(ConsumeConfig.java:42)
at com.project.eventLogger.Execute.main(Execute.java:18)
Exception in thread "main" java.lang.ExceptionInInitializerError
at com.project.eventLogger.Execute.main(Execute.java:18)
Caused by: java.lang.NullPointerException
at com.project.eventLogger.ConsumeConfig.(ConsumeConfig.java:47)
... 1 more

看到异常,很明显它无法加载在 ConsumeConfig.java 中完成的 ConsumerConfig.properties.

đây rồiConsumeConfig.java:

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Properties;

/**
* @author vishrant
*
*/
public class ConsumeConfig {

public static String zookeeper;
public static String balance;
public static String bootstrap_servers;
public static String zk_session_to;
public static String zk_sync;
public static String auto_commit;
public static String[] topics;
private static String kafka_bin;
private static final String PROPERTIES_FILE_PATH = "src/main/resources/ConsumerConfig.properties";

private static Properties loadPropertiesFile() throws IOException {
Properties properties = new Properties();
InputStream in = new FileInputStream(PROPERTIES_FILE_PATH);
properties.load(in);
return properties;
}

static {
Properties property = null;
thử {
property = loadPropertiesFile();
} bắt (IOException e) {
// TODO Khối catch được tạo tự động
e.printStackTrace();
}
zookeeper = property.getProperty("ZOOKEEPER");
balance = property.getProperty("BALANCE");
bootstrap_servers = property.getProperty("BOOTSTRAP_SERVERS");
zk_session_to = property.getProperty("ZK_SESSION_TO");
zk_sync = property.getProperty("ZK_SYNC_TIME");
auto_commit = property.getProperty("AUTO_COMMIT_INTERVAL");
topics = property.getProperty("CONSUMER_TOPICS").split(",");
kafka_bin = property.getProperty("KAFKA_BIN_PATH");
}
}

有人可以告诉我问题是什么以及如何解决吗?

在 Eclipse 本身中运行时运行得非常好。

编辑1:

现在,异常(exception)是:

Exception in thread "main" java.lang.ExceptionInInitializerError
at com.project.eventLogger.Execute.main(Execute.java:18)
Caused by: java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:434)
at java.util.Properties.load0(Properties.java:353)
at java.util.Properties.load(Properties.java:341)
at com.project.eventLogger.ConsumeConfig.loadPropertiesFile(ConsumeConfig.java:35)
at com.project.eventLogger.ConsumeConfig. (ConsumeConfig.java:42)
... 1 more

第 35 行:

props.load(resourceStream);

这是现在的代码:

private static final String PROPERTIES_FILE_PATH = "ConsumerConfig.properties";

private static Properties loadPropertiesFile() throws IOException {
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Properties props = new Properties();
InputStream resourceStream = loader.getResourceAsStream(PROPERTIES_FILE_PATH);
props.load(resourceStream);
return props;
}

1 Câu trả lời

我认为原因如下:

  • 无法为 Maven 项目正确创建 jar 文件,因为目录 tài nguyên 通常不会按原样复制到 target 目录,即,而不是 <

resources/Config.properties

它应该看起来没有资源目录:

Config.properties

直接在jar文件的根目录下。

  • 第二点是您在代码中使用以下内容

private static final String PROPERTIES_FILE_PATH = "src/main/resources/ConsumerConfig.properties";

在您的 IDE(本例中为 Eclipse)之外不会看到此路径,因为 src/main/resources 不应存在于 jar 文件中,正如您在 jar 文件列表中看到的那样.

  • 最后一点是,您应该使用类加载器的 getResourceAsStream(),因为 Vikrant Kashyap 已经指出了。

关于java - 运行 jar 时项目抛出 IOException(未找到文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35982967/

25 4 0
Bài viết được đề xuất: java - Spring idref 没有像我想象的那样工作
Bài viết được đề xuất: .net - 使程序平台独立
Bài viết được đề xuất: frameworks - 软件/编程框架的实际定义是什么?
Bài viết được đề xuất: java - Spring:使用 2 个子句进行派生查询?
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com