File lister offers a small set of utilities for listing files to Gradle projects.
This project is licensed under the terms of the MIT license.
1 . Apply the plugin:
build.gradle:
plugins {
id 'all.shared.gradle.file-lister' version '1.0.2'
}2 . Use fileLister methods, obtainPartialFileTree and/or obtainFullFileTree:
build.gradle:
final someFilesInTree = fileLister.obtainPartialFileTree()
final allFilesInTree = fileLister.obtainFullFileTree()3 . Jump to Using/Configuration, for customization or digging on How it works.
Get a file tree from a project's specified folder, excluding by default Gradle's files and folders: **/gradlew.*, **/gradle, **/.gradle and **/build, excluding by default files and/or folders listed in the .gitignore's files found in the folder tree, excluding by default Nodes' folder **/node_modules, and optionally excluding and/or including a set of custom ANT patterns.
Basically offers a small set of functions:
ConfigurableFileTree obtainFullFileTree(folder, [excludes:[..], includes:[..]]): A function for recursively listing all files and/or folders from a project's specified folder, excluding and/or including a set of custom ANT patterns.ConfigurableFileTree obtainPartialFileTree(folder, [excludes:[..], includes:[..]]): A function for recursively listing all files and/or folders from a project's specified folder, excluding and/or including a set of custom ANT patterns and excluding files listed in the.gitignore's files found in the folder tree.
When using the core fileTree method, it excludes some file/folders by default[1], mainly commanded by ANT, e.g.: **/.cvsignore, **/.git, **/.gitignore, **/.svn, etc; that is good, but this plugin provides:
- Additional exclusions based on Gradle:
**/.gradleand**/gradle-wrapper.jar. - Also one of the methods,
obtainPartialFileTree, additionally excludes by default files/folders taking in account also the.gitignorefiles information (which is what is not sent from the project to the repository, what usually means that is not relevant to the project).- Git patterns containing
!,[&]are not considered by the plugin.
- Git patterns containing
E.g.[2]:
Given the following folder structure:
.gitignore
/.git
file1.ext1
/folderA
file1.ext1
file1.ext3
/gradle
file1.ext1
/folderB
.gitignore
file1.ext1
file1.ext2
file1.ext3
/node_modules
file1.ext1
- With
/.gitignorehaving:*.ext2 - With
/folderB/.gitignorehaving:*.ext3
The result will be:
- When using
fileTree():/folderA/file1.ext1,/folderA/file1.ext3,/folderA/gradle/file1.ext1,/folderB/file1.ext1,/folderB/file1.ext2,/folderB/file1.ext3and/folderB/node_modules/file1.ext1 - When using
obtainFullFileTree):/folderA/file1.ext1,/folderA/file1.ext3,/folderB/file1.ext1,/folderB/file1.ext2and/folderB/file1.ext3 - When using
obtainPartialFileTree():/folderA/file1.ext1,/folderA/file1.ext3and/folderB/file1.ext1
[1] All ANT default excludes.
[2] For an actual use example, see basecode project.
- None
- Apply the plugin:
plugins {
id 'all.shared.gradle.file-lister' version '1.0.2'
}- Use the plugin, it will add a property named
fileListerto theProject:
- Without folder or filters:
final filesInTree = fileLister.obtainPartialFileTree(), this will walk through project folder. - Without filters:
final filesInTree = fileLister.obtainFullFileTree('someFolder'), this will walk throughsomeFolderinside the project folder. - Without including:
final filesInTree = fileLister.obtainPartialFileTree('someFolder', [excludes: 'someANTpattern']), this will walk throughsomeFolderinside the project folder, excludingsomeANTpatternpattern. - Without excluding:
final filesInTree = fileLister.obtainFullFileTree('someFolder', [includes: 'someANTpattern']), this will walk throughsomeFolderinside the project folder, includingsomeANTpatternpattern. - Without folder:
final filesInTree = fileLister.obtainPartialFileTree('.', [excludes: 'someANTpattern1', includes: 'someANTpattern2']), this will walk through project folder, excludingsomeANTpattern1pattern and includingsomeANTpattern2pattern [1]. - With all:
final filesInTree = fileLister.obtainFullFileTree('someFolder', [excludes: 'someANTpattern1', includes: 'someANTpattern2']), this will walk throughsomeFolder, excludingsomeANTpattern1pattern and includingsomeANTpattern2pattern [1].
[1]
excludespattern has precedence overincludespatterns.
1 . Add dependency:
repositories {
jcenter()
maven {
url 'https://plugins.gradle.org/m2/'
}
maven {
url 'https://dl.bintray.com/gmullerb/all.shared.gradle'
}
}
dependencies {
compile gradleApi()
compile 'gradle.plugin.all.shared.gradle.file-lister:file-lister:+'
}2 . Add plugin programmatically:
import all.shared.gradle.file.FileListerExtension
import all.shared.gradle.file.FileListerPlugin
..
if (project.extensions.findByName(FileListerPlugin.EXTENSION_NAME) == null) {
plugin.apply(new FileListerPlugin())
}3 . Access filelister:
..
final FileTree result = ((FileListerExtension) project.extensions
.findByName(FileListerPlugin.EXTENSION_NAME))
.obtainPartialFileTree()
result.visit {
..
}
..Clone or download the project[1], in the desired folder execute:
git clone https://github.com/gmullerb/file-lister- No need, only download and run (It's Gradle! Yes!).
-
To build it:
gradlew: this will run default tasks, orgradlew build.
-
To assess files:
gradlew assessCommon: will check common style of files.gradlew assessGradle: will check code style of Gradle's.gradlew assess: will check code style of Groovy's.gradlew codenarcMain: will check code style of Groovy's source files.gradlew codenarcTest: will check code style of Groovy's test files.
-
To test code:
gradlew test- This task is finalized with a Jacoco Report.
-
To get all the tasks for the project:
gradlew tasks --all
/src
/main
/groovy
/test
/groovy
src/main/groovy: Source code files.FileListerExtensionis where all the magic happens.
src/test/groovy: Test code files[1].
All all.shared.gradle plugins define:
- PluginNamePlugin: which contains the class implements
Plugininterface. - PluginNameExtension: which represent the extension of the plugin.
- If Tasks are define, then their names will be TaskNameTask.
- If Actions are define, then their names will be ActionNameAction.
All all.shared.gradle plugins have two static members:
-
String EXTENSION_NAME: This will have the name of the extension that the plugin add.- if the plugin does not add an extension the this field will not exist.
-
String TASK_NAME: This will have the name of the unique task that the plugin add.- if the plugin does not add a task or add more than one task, then this field will not exist.
-
boolean complement(final ..): will apply the plugin and return true if successful, false otherwise.- this methods is exactly equivalent to the instance
applymethod, but without instantiate the class if not required.
- this methods is exactly equivalent to the instance
Both may be useful when applying the plugin when creating custom plugins.
All all.shared.gradle plugins "silently" fail when the extension can not be added.
CHANGELOG.md: add information of notable changes for each version here, chronologically ordered [1].
[1] Keep a Changelog
- Use code style verification tools => Encourages Best Practices, Efficiency, Readability and Learnability.
- Start testing early => Encourages Reliability and Maintainability.
- Code Review everything => Encourages Functional suitability, Performance Efficiency and Teamwork.
Don't forget:
- Love what you do.
- Learn everyday.
- Learn yourself.
- Share your knowledge.
- Learn from the past, dream on the future, live and enjoy the present to the max!.
At life:
- Let's act, not complain.
- Be flexible.
At work:
- Let's give solutions, not questions.
- Aim to simplicity not intellectualism.