Я нахожусь в процессе перехода от 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>
...