Resolves https://github.com/spring-projects/spring-integration/issues/3488 Resolves two problems: - When changes are made deep in the directory tree, they were not detected because the directory is in the metadata store and only passes the filter if a file immediately under it is changed, changing the directory's timestamp. This is solved by subclassing `AbstractDirectoryAwareFileListFilter`, allowing its `alwaysAcceptDirectories` property to be set. - Only the filename was used as a metadata key; causing problems if a file with the same name appears multiple times in the tree. This is solved with a new property on `AbstractDirectoryAwareFileListFilter` used by the gateways to determine whether to filter the raw file names returned by the session (previous behavior) or the full path relative to the root directory. **cherry-pick to 5.4.x, 5.3.x** * Some code style clean up
Spring Integration

Code of Conduct
Please see our Code of conduct.
Reporting Security Vulnerabilities
Please see our Security policy.
Checking out and Building
To check out the project and build from the source, do the following:
git clone git://github.com/spring-projects/spring-integration.git
cd spring-integration
./gradlew clean test
or
./gradlew clean testAll
The latter runs additional tests (those annotated with @LongRunningIntegrationTest); it is a more thorough test but takes quite a lot longer to run.
The test results are captured in build/reports/tests/test (or .../testAll) under each module (in HTML format).
Add --continue to the command to perform a complete build, even if there are failing tests in some modules; otherwise the build will stop after the current module(s) being built are completed.
NOTE: While Spring Integration runs with Java SE 8 or higher, a Java 11 compiler is required to build the project.
To build and install jars into your local Maven cache:
./gradlew publishToMavenLocal
To build api Javadoc (results will be in build/api):
./gradlew api
To build the reference documentation (results will be in build/docs/asciidoc and build/docs/asciidocPdf):
./gradlew reference
To build complete distribution including -dist, -docs, and -schema zip files (results will be in build/distributions):
./gradlew dist
Using Eclipse or Spring Tool Suite (with BuildShip Plugin)
If you have the BuildShip plugin installed,
File -> Import -> Gradle -> Existing Gradle Project
Using Eclipse or Spring Tool Suite (when the BuildShip Plugin is not installed)
To generate Eclipse metadata (.classpath and .project files, etc), do the following:
./gradlew eclipse
Once complete, you may then import the projects into Eclipse as usual:
File -> Import -> General -> Existing projects into workspace
Browse to the 'spring-integration' root directory. All projects should import free of errors.
Using IntelliJ IDEA
To import the project into IntelliJ IDEA:
File -> Open... -> and select build.gradle from spring-integration project root directory
Guidelines
See also Contributor Guidelines.
Resources
For more information, please visit the Spring Integration website at: https://spring.io/projects/spring-integration