java - 运行 jar 时无法将资源作为流读取

标签 java maven-assembly-plugin bufferedinputstream nanohttpd

我使用 NanoHTTPD 作为我的应用程序服务器,IDE 中一切正常。 当我运行相同的代码表单 jar(使用 maven-assemble-plugin 生成)时,不会加载资源。

我的ApServer代码:

public class HintTestAppServer extends NanoHTTPD {

private HintTestAppServer() throws IOException {
    super(8000);
    start(NanoHTTPD.SOCKET_READ_TIMEOUT, false);
    System.out.println("Running on port " + super.getListeningPort() + "\n");
}

public static void main(String[] args) {
    try {
        new HintTestAppServer();
    } catch (IOException ioe) {
        System.err.println("Couldn't start server:\n" + ioe);
    }
}

@Override
public Response serve(IHTTPSession session) {

  //below line always return null fot the buffered input stream
    BufferedInputStream bufferedInputStream = (BufferedInputStream)
            Thread.currentThread().getContextClassLoader().getResourceAsStream("web/" + session.getUri());
    String mimeType;
    try {
        mimeType = URLConnection.guessContentTypeFromStream(bufferedInputStream);
    } catch (IOException e) {
        e.printStackTrace();
        return newFixedLengthResponse("ERROR");
    }

    try {
        return newFixedLengthResponse(Response.Status.OK, mimeType, bufferedInputStream, bufferedInputStream.available());
    } catch (IOException e) {
        e.printStackTrace();
        return newFixedLengthResponse("ERROR");
    }

}

}

我的 pom.xml 程序集插件:

            <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.1.1</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>server.HintTestAppServer</mainClass>
                    </manifest>
                </archive>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

我用来运行 jar 的命令是:

java -cp target/hint-test-1.0.1-jar-with-dependencies.jar server.HintTestAppServer

我还尝试通过以下方式加载资源:(在 IDE 上工作,但不在 jar 内)

BufferedInputStream bufferedInputStream = (BufferedInputStream)
getClass().getClassLoader().getResourceAsStream("web/" + session.getUri());

当我解压 jar 时,我会在根文件夹中看到包含所有文件的 Web 文件夹。

请帮忙

最佳答案

发现解决方案是:

InputStream in = this.getClass().getClassLoader().getResourceAsStream("web" + session.getUri());

关于java - 运行 jar 时无法将资源作为流读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57293348/

相关文章:

java - 没有目标\类的 Maven jar-with-dependencies(构建 Artifact )

java - 套接字:BufferedOutputStream 还是 OutputStream?

java - BufferedInputStream 的缓冲区大小

java - 如何使用java计算InputStream的char?

java - 简单解析例程的问题

java - 在 Java 中打印左三角形 - 程序可以运行,但为什么呢?

java - 当消费者抛出异常时如何使 JUnit 测试失败?

java - 使用 BouncyCaSTLe 在 Java 中验证 ECDSA 签名时出错

maven-2 - Maven Assembly 插件 - 多模块项目 - 源和 javadoc 未添加到 zip 文件

maven- assembly-plugin 文件集权限已更改?