gradle - Spring Tools Suite和Gradle-设置为从STS内部使用正确的资源

标签 gradle spring-tool-suite

我在Spring Tools Suite(3.7.2 RELEASE)中使用以下源文件夹设置了Spring Boot Gradle项目:

- src/integration-test/java
- src/integration-test/resources 
- src/main/java
- src/main/resources
- src/test/java
- src/test/resources`

每当我从STS内部运行应用程序或单元测试时,我都会看到STS正在使用src/integration-test/resources下的资源。

对于所有3个资源源文件夹中都存在的文件,我在STS中看到重复的资源警告。例如,我在所有3个源文件夹中都有一个application.properties,并且看到以下内容:
The resource is a duplicate of src/integration-test/resources/application.properties and was not copied to the output folder

如果我通过JAR或从命令行(通过gradle build)进行单元测试/集成测试来运行该应用程序,那么一切似乎都使用了正确的资源。这使我相信STS / Eclipse如何处理gradle存在问题。

是否有人知道在使用gradle时如何配置STS以使用正确的资源源文件夹?

我认为我的问题可能与Spring Boot incorrectly loads test configuration when running from eclipse+gradlehttps://issuetracker.springsource.com/browse/STS-3882https://issues.gradle.org/browse/GRADLE-1777有关(或相同?)

我也尝试了在这里找到的解决方案,但这似乎只能修复Maven构建:
Spring Tool Suite finds spring-boot integration test configuration and does not start main application

最佳答案

I think my problem may be related to...



是的,它是相关的,但我认为不一样。该问题是由运行时类路径不正确引起的。此问题是来自eclipse项目构建器的错误,因此是编译时问题。

这些问题是密切相关的。根据您的观点,您可以说它们是相同的(测试和编译时类路径的错误混合)。

特别是在这里,问题在于eclipse构建器试图将其在源文件夹中找到的所有资源复制到项目的单个输出文件夹中。每个源文件夹都有一个“application.properties”。生成器警告说,它无法复制其中一些,因为其中一个将覆盖另一个。

我认为可能对此问题有解决方案。但这是真正应该来自Gradle +(BuildShip | STS Gradle Tooling)而非您的解决方案。

在Eclipse中,可以将每个源文件夹分别配置为以特定的输出文件夹为目标。 Maven + M2E可以做到这一点,但是Gradle +(BuildsShip | STS Gradle Tooling)组合工具却没有。

例如,这是maven在配置测试资源文件夹时放入eclipse .classpath文件的内容:
    <classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
         <attributes>
            <attribute name="maven.pomderived" value="true"/>
         </attributes>
     </classpathentry>

注意,它是如何显式设置该条目的输出文件夹的(与项目的默认输出文件夹不同)。

您可以通过类似方式修改gradle项目的.classpath来自己解决问题。通过手动执行或从build.gradle执行。

我不确定这是否值得,但是您可能仍然会受到运行时类路径问题的打击(由于这些文件夹仍将添加到您的运行时类路径中,因此您的运行时类路径最终将带有两个appication.properties资源,一个将“遮蔽”另一个。请参见:https://bugs.eclipse.org/bugs/show_bug.cgi?id=482315)

我会说,正确的做法是将add a comment链接到我链接的问题,并希望他们尽快解决此问题,因为您可以通过侵入build.gradle文件来修改.classpath来完成很多工作(这无法解决)运行时类路径问题,但是为了解决运行时类路径问题,他们必须将源文件夹配置为以单个输出文件夹为目标,类似于m2e所做的那样)。

关于gradle - Spring Tools Suite和Gradle-设置为从STS内部使用正确的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34338764/

相关文章:

spring - ¿如何使用 Spring Security 仅为我的 api 禁用 CSRF?

grails - 运行应用程序 : org/apache/ivy/plugins/resolver/ChainResolver

tomcat - 在 Ubuntu 14.04 上安装 STS 3.7.2 64 位

java - 如何安装STS到eclipseoxy(2018.march) 市场上没有sts?

java - Docker Java 应用程序 - SSLHandshakeException/未找到可信证书

gradle - pivotal/LicenseFinder 为 Gradle 项目返回 "No dependencies recognized!"

android - 当我在 Android Studio 中按下 Run Android Application 按钮时,我可以运行 checkstyle

java - 我可以使用 Gradle 强制确定类路径中依赖项的顺序吗?

java - Maven 更新项目后项目结构发生了变化,源文件夹的包含和排除模式也发生了变化

Gradle 构建 null 控制台对象