Почему servletContext.getResourceAsStream получает файлы вне исполняемого файла jar? - PullRequest
0 голосов
/ 09 мая 2018

Я нахожусь в процессе перехода от war-упаковки моего приложения Spring Boot к использованию исполняемого файла jar.

Мои ресурсы находятся под src/main/webapp и, согласно Документам Spring Boot (если я правильно понимаю), даже не должны быть включены в окончательный исполняемый файл jar:

Do not use the src/main/webapp directory if your application is packaged as a jar. Although this directory is a common standard, it works only with war packaging, and it is silently ignored by most build tools if you generate a jar.

Это подтверждается тем фактом, что в целевой банке я вообще не могу найти эти ресурсы. К сожалению, описание структуры исполняемого файла jar , похоже, ничего не говорит о том, где размещены ресурсы.

Однако, к моему удивлению, вызов servletContext.getResourceAsStream("/myresource.js") в приложении действительно находит ресурс правильно. И ресурс, похоже, обслуживается из моего каталога src/main/webapp (даже при автономном запуске jar, например, через java -jar myjar.jar.

Также:

  • вызывает servletContext.getResourcePaths список содержимого моего src/main/webapp каталога
  • вызов servletContext.getRealPath("/") возвращает точный путь в файловой системе к моим исходным файлам, например. c:\path\to\my\project\src\main\webapp.

Почему это происходит? Я ожидаю, что только то, что находится внутри моей банки, будет доступно для приложения. Размещает ли встроенный tomcat мои исходные файлы в корень контекста по какой-то причине? Будем благодарны за любые ссылки на соответствующую документацию.


P.S. В моем pom.xml вы увидите стандартные вещи, такие как:

<packaging>jar</packaging>
...
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
</parent>
...
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.0.1.RELEASE</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
...
<dependencies>
    <!-- Spring Boot -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
    </dependency>
...
...