首页 > 解决方案 > 使用 Travis-CI 和 Gradle 时从 getResourceAsStream 获取 null

问题描述

在我的 gradle 项目中,它有一个资源目录。使用静态 getResourceAsStream,我从该目录访问一个文件。这适用于 Eclipse 或在本地从命令行运行 gradle 时。但是在 Travis-CI 中运行时,它无法找到该文件。

我曾尝试使用“Thread.currentThread().getContextClassLoader().getResourceAsStream”和“LenPEGUtil.class.getClassLoader().getResourceAsStream”,但它们中的每一个要么在本地停止工作,要么在 Travis-CI 中仍然失败。

带有源集的 build.gradle

sourceSets{
    main{
        java {
            srcDir 'src'
        }
        resources {
            srcDir 'resources'
        }
    }
    test{
        java{
            srcDir 'test'
        }
        resources{
            srcDir 'testResources'
        }
    }
}

读取文件的java代码:

    private static BufferedImage lenna;
    static {
        try {
            InputStream lennaInputStream = LenPEGUtil.class.getResourceAsStream("/lenna.png");
            setLenna(ImageIO.read(lennaInputStream));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

这在本地有效。但在 Travis-CI 中,我遇到了一个例外:

jjcard.jlenpeg.lenPEGWriterTest STANDARD_ERROR
    java.lang.IllegalArgumentException: input == null!
        at javax.imageio.ImageIO.read(ImageIO.java:1348)
        at jjcard.jlenpeg.LenPEGUtil.<clinit>(LenPEGUtil.java:96)
        at jjcard.jlenpeg.lenPEGWriterTest.setup(lenPEGWriterTest.java:23)

标签: javagradletravis-ci

解决方案


推荐阅读