This tool is work in progress
If you find any bugs or miss any feature feel free to pitch in or create a ticket so the issue can be resolved quickly or the new feature can be added.
When using AEM in projects there are a couple of things that happen quite often. This tool is like a swiss army knife that tries to help you on everyday tasks for developer and dev-ops.
Use cases:
- Stop searching for the cURL commands use them through this tool. It will help you to do the tasks quicker.
- Need to work on multiple projects create one configuration file for that project and pull in the requirements by typing aem start.
- Update dependencies every time you start aem based on the configuration file.
- Copy packages from one instance to the other with absolute ease.
Let me know what you think. happy AEM-ing.
Build the project from scratch (needs go >= v1.14.1) or download the prebuild binary available for your operating system.
Prebuild versions are:
- OSX (Intel (64 bit), Apple Silicone)
- Linux (64bit)
- Windows (64bit)
Download or build and copy the binary to a location in your path. Latest prebuild version can be found here.
Or use the following OSX/Linux oneliner to install:
Check out the amazing Homebrew and when you have homebrew installed use the following commands to install
brew tap jlentink/aem
brew install aem
curl -sfL https://raw.githubusercontent.com/jlentink/aem/master/install.sh | bash -s -- -b /usr/local/bin
curl -sfL https://raw.githubusercontent.com/jlentink/aem/master/install.sh | bash
curl -sfL https://raw.githubusercontent.com/jlentink/aem/master/install.sh | bash -s -- -b YOUR_LOCATION
Example install locations.
execute echo ${PATH}
and validate that /usr/local/bin is in your current path. If in path use cp aem /usr/local/bin
to place the executable ont he correct spot. If not in path add the following line export PATH="${PATH}:/usr/local/bin"
to your ~/.bash_profile, ~/.profile or ~/.zprofile with your favorite editor.
Don't forget to set the executable permission. chmod a+x aem
Place the executable in for example "C:\Program files\aem"
and follow the tutorials on the internet how to add them to add this directory to your path.
The command line tool is broken up in different sub-commands. The commands can be used by typing aem <command>
eg. aem start
All the possible commands are listed below. Every command has the option to request help on the specifications of that commands. eg. aem start -h
Usage:
aem [command]
Available Commands:
activation Activation commands
build Build application
bundle Bundle commands
deploy Deploy to server(s)
generate Generate code block
help Help about any command
indexes index commands
init Init new project
invalidate Invalidate path's on dispatcher
log List error log or application log
oak Oak commands
open Open URL for Adobe Experience Manager instance in browser
package Package commands
passwords Set passwords into your keychain
projects List know projects
pull-content Pull content in from instance via packages
setup-check Check if all needed binaries are available for all functionality
shell Shell completion commands
start Start Adobe Experience Manager instance
stop stop Adobe Experience Manager instance
system-information Get system information from Adobe Experience Manager instance
version Show version of aemcli
Flags:
-h, --help help for aem
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
Activation commands for (de)activation a page or a tree.
Activation commands
Usage:
aem activation [flags]
aem activation [command]
Available Commands:
page Activate / Deactivate page
tree Activate Tree
Flags:
-h, --help help for activation
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
Invalidate path's on dispatcher
Usage: aem activation invalidate [flags]
Aliases: invalidate, flush
Flags: -g, --group string Instance group to sent invalidate to -h, --help help for invalidate -n, --name string Instance to sent invalidate to -p, --path string Package to rebuild
Global Flags: -P, --project string Run command for project. (if not current working directory) -v, --verbose verbose output
Activate / Deactivate page on instance
Usage:
aem activation page [flags]
Flags:
-a, --activate Activate page
-d, --deactivate Deactivate
-g, --group string Instance group to (de)activate page on
-h, --help help for page
-n, --name string Instance to (de)activate page on (default "local-author")
-p, --path string Path to (de)activate
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
Activate tree
Usage:
aem activation tree [flags]
Flags:
-g, --group string Instance group to (de)activate page on
-h, --help help for tree
-d, --ignore-deactivated Ignore Deactivated
-n, --name string Instance to (de)activate page on (default "local-author")
-o, --only-modified Only Modified
-p, --path string Path to (de)activate
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
Build application using the maven pom file
Usage:
aem build [flags]
Flags:
-h, --help help for build
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
All commands available for bundles
Usage:
aem bundle [flags]
aem bundle [command]
Available Commands:
install Install bundle
list List bundles
start Start bundle
stop Stop bundle
Flags:
-h, --help help for bundle
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
Install bundle on instance
Usage:
aem bundle install [flags]
Flags:
-b, --bundle string Instance group to install bundle on
-g, --group string Instance group to install bundle on
-h, --help help for install
-l, --level string Bundle start level (default "20")
-n, --name string Instance to install bundle on (default "local-author")
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
List bundles on instance
Usage:
aem bundle list [flags]
Flags:
-h, --help help for list
-n, --name string Instance to list bundles off (default "local-author")
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
Start bundle on an aem instance
Usage:
aem bundle start [flags]
Flags:
-b, --bundle string Instance group to install bundle on
-g, --group string Instance group to install bundle on
-h, --help help for start
-n, --name string Instance to install bundle on (default "local-author")
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
Stop bundle on an aem instance
Usage:
aem bundle stop [flags]
Flags:
-b, --bundle string Instance group to install bundle on
-g, --group string Instance group to install bundle on
-h, --help help for stop
-n, --name string Instance to install bundle on (default "local-author")
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
Deploy (or deploy and build) to server(s)
Usage:
aem deploy [flags]
Flags:
-a, --artifact string Deploy one a single artifact
-b, --build Build before deploy
-g, --group string Group to deploy to
-h, --help help for deploy
-n, --name string Instance to deploy to (default "local-author")
-p, --password string Overwrite password to use if not using the one from config file
-u, --username string Overwrite username to use if not using the one from config file
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
Generate code block based on templates. Every template or filename can have a variable. Variables are defined as {{.variablename}}. Altering the case typing can be done via following functions:
- CC - camelCase
- UC - UPPER CASE
- LC - lower case
- PC - PascalCase
- SC - snake_case
- KC - kabab-case
- TC - Title case
More documentation on templates can be found here.
Usage:
aem generate [flags]
aem generate [command]
Available Commands:
init Write default templates to disk
Flags:
-h, --help help for generate
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
Write default templates to disk for usage and customization
Usage:
aem generate init [flags]
Flags:
-h, --help help for init
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
Index commands
Usage:
aem indexes [flags]
aem indexes [command]
Available Commands:
indexes Show indexes on instance
list Reindex index on instance
Flags:
-h, --help help for indexes
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
Show indexes on instance
Usage: aem indexes indexes [flags]
Flags: -h, --help help for indexes -n, --name string Instance to stop (default "local-author")
Global Flags: -P, --project string Run command for project. (if not current working directory) -v, --verbose verbose output
Reindex index on instance
Usage:
aem indexes list [flags]
Aliases:
list, reindex
Flags:
-h, --help help for list
-i, --index string Index to reindex
-n, --name string Instance to stop (default "local-author")
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
Creates a config file. The config file allows you to define the instances used during the project. (E.g. local author, local dev etc...)
Usage:
aem init [flags]
Flags:
-f, --force Force override of current configuration
-h, --help help for init
Global Flags:
-v, --verbose verbose output
-P, --project string Run command for project. (if not current working directory)
In the config, you can also define the packages you want to install at boot as for the location of the AEM jar to download for the project.
See the log file for an instance running locally. Use -f to follow the log file for more log information coming in. use CTRL+c to stop following the log file.
Usage:
aem log [flags]
Aliases:
log, logs
Flags:
-f, --follow Actively follow lines when they come in
-h, --help help for log
--list List available log files
-l, --log string Which file(s) to follow (default "error.log")
-n, --name string Instance to stop (default "local-author")
Global Flags:
-v, --verbose verbose output
-P, --project string Run command for project. (if not current working directory)
Oak commands
Usage:
aem oak [flags]
aem oak [command]
Available Commands:
check Run oak check
checkpoints Run oak checkpoints
compact Run oak compact
console Run oak console
explorer Run oak explorer
Flags:
-h, --help help for oak
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
Run oak check
Usage:
aem oak check [flags]
Flags:
-a, --aem string Version of AEM to use oak-run on. (use matching AEM version of oak-run)
-h, --help help for check
-n, --name string Instance to stop (default "local-author")
-o, --oak string Define version of oak-run to use
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
Run oak checkpoints
Usage:
aem oak checkpoints [flags]
Flags:
-a, --aem string Version of AEM to use oak-run on. (use matching AEM version of oak-run)
-h, --help help for checkpoints
-n, --name string Instance to stop (default "local-author")
-o, --oak string Define version of oak-run to use
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
Run oak compact Run oak-run check on instance. Check the FileStore for inconsistencies. More information see Oak-run.
Use --aem
to define which AEM version you are running this against and aem cli will set the corresponding oak-run version.
When you wan't to define a specific version use the --oak
.
The oak jar will be placed in the bin folder under instance and downloaded if it not exists yet.
Usage:
aem oak compact [flags]
Flags:
-a, --aem string Version of AEM to use oak-run on. (use matching AEM version of oak-run)
-h, --help help for compact
-n, --name string Instance to stop (default "local-author")
-o, --oak string Define version of oak-run to use
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
Run oak console Run oak-run check on instance. Check the FileStore for inconsistencies. More information see Oak-run.
Use --aem
to define which AEM version you are running this against and aem cli will set the corresponding oak-run version.
When you wan't to define a specific version use the --oak
.
The oak jar will be placed in the bin folder under instance and downloaded if it not exists yet.
Usage:
aem oak console [flags]
Flags:
-a, --aem string Version of AEM to use oak-run on. (use matching AEM version of oak-run)
-h, --help help for console
-m, --metrics Enables metrics based statistics collection
-n, --name string Instance to stop (default "local-author")
-o, --oak string Define version of oak-run to use
-w, --read-write Connect to repository in read-write mode
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
Run oak explorer Run oak-run check on instance. Check the FileStore for inconsistencies. More information see Oak-run.
Use --aem
to define which AEM version you are running this against and aem cli will set the corresponding oak-run version.
When you wan't to define a specific version use the --oak
.
The oak jar will be placed in the bin folder under instance and downloaded if it not exists yet.
Usage:
aem oak explorer [flags]
Flags:
-a, --aem string Version of AEM to use oak-run on. (use matching AEM version of oak-run)
-h, --help help for explorer
-n, --name string Instance to stop (default "local-author")
-o, --oak string Define version of oak-run to use
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
Open a browser to the instance of your choosing.
Usage:
aem open [instance name] [flags]
Flags:
-h, --help help for open
-n, --name string Instance to stop (default "local-author")
Global Flags:
-v, --verbose verbose output
-P, --project string Run command for project. (if not current working directory)
Package commands
Usage:
aem package [flags]
aem package [command]
Available Commands:
copy Copy packages from one instance to another
download Download packages
install Install uploaded package
list List packages
rebuild package rebuild
upload Upload package to aem
Flags:
-h, --help help for package
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
List the packages installed on an instance of your choosing.
Usage:
aem package list [flags]
Aliases:
package-list, plist
Flags:
-h, --help help for package-list
-n, --name string Instance to stop (default "local-author")
Global Flags:
-v, --verbose verbose output
-P, --project string Run command for project. (if not current working directory)
Rebuild a package on an instance of your choosing.
Usage:
aem package rebuild [flags]
Flags:
-h, --help help for package-rebuild
-n, --name string Instance to rebuild package on (default "local-author")
-p, --package string Package to rebuild
Global Flags:
-v, --verbose verbose output
-P, --project string Run command for project. (if not current working directory)
Download a package from any instance defined in the configuration file
Usage:
aem package download [flags]
Flags:
-h, --help help for package-download
-n, --name string Instance to stop (default "local-author")
-p, --package string Package name. E.g: name, name:1.0.0
Global Flags:
-v, --verbose verbose output
-P, --project string Run command for project. (if not current working directory)
Copy a package from one instance to another. The destination can be a group to easily install to all members of a group or a single target.
Usage:
aem package copy [flags]
Flags:
-f, --from string Instance to copy from
-h, --help help for package-copy
-p, --package string Package to copy
-t, --to string Destination Instance
Global Flags:
-v, --verbose verbose output
-P, --project string Run command for project. (if not current working directory)
Install a package you have locally to one instance or to a complete group. The name of the package will be extracted from the manifest in the package
Usage:
aem package install [flags]
Flags:
-h, --help help for package-install
-n, --name string Instance to rebuild package on (default "local-author")
-p, --package string Package to rebuild
Global Flags:
-v, --verbose verbose output
-P, --project string Run command for project. (if not current working directory)
You don't want to store passwords in a git repository for secure development. Although the tool allows you to define passwords in the configuration file there is an option to safely store the passwords in the key-ring (password managers eg. OSX key-chain) of the operating system. Use the passwords command to populate or update the stored passwords.
Usage:
aem passwords [flags]
Aliases:
passwords, password, passwd
Flags:
-h, --help help for passwords
-n, --name string Update specific instance
Global Flags:
-v, --verbose verbose output
-P, --project string Run command for project. (if not current working directory)
shown the known projects from previous use. These projects can be triggered from everywhere using -P
--project
with every command
Usage:
aem projects [flags]
Flags:
-h, --help help for projects
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
Download the content packages defined in the configuration file and upload them to an instance of your choosing. Handy to sync content to developer instances during the project.
Usage:
aem pull-content [flags]
Aliases:
pull-content, cpull
Flags:
-b, --build Build before download
-f, --from string Instance to copy from
-h, --help help for pull-content
-t, --to string Destination Instance (default "local-author")
Global Flags:
-v, --verbose verbose output
-P, --project string Run command for project. (if not current working directory)
Check if all needed binaries are available for all functionality
Usage: aem setup-check [flags]
Aliases: setup-check, setup
Flags: -h, --help help for setup-check
Global Flags: -P, --project string Run command for project. (if not current working directory) -v, --verbose verbose output
Shell completion commands
Usage:
aem shell [flags]
aem shell [command]
Available Commands:
bash Generate bash completion for aemCLI
zsh Generate zsh completion for aemCLI
Flags:
-h, --help help for shell
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
Create a bash completion script for to use on your system.
E.g: aem bash > aem-completion.bash
Usage:
aem shell bash[flags]
Flags:
-h, --help help for bash-completion
-n, --name string Instance to stop (default "local-author")
Global Flags:
-v, --verbose verbose output
-P, --project string Run command for project. (if not current working directory)
Create a zsh completion script for to use on your system.
E.g: aem zsh > aem-completion.bash
Usage:
aem shell zsh [flags]
Aliases:
zsh, zsh
Flags:
-h, --help help for zsh
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
when using the start command is used it will download all files needed that are defined in the config file and automatically installed. Files removed from the configuration will be removed from disk so that AEM will automatically deinstall them on the next start.
By default, the start commands also checks that you are not starting the aem server as the root user.
start is compatible with the start and stop scripts provided by Adobe.
Usage:
aem start [flags]
Flags:
-r, --allow-root Allow to start as root user (UID: 0)
-d, --download Force re-download
-f, --foreground on't detach aem from current tty
-h, --help help for start
-p, --ignore-pid Ignore existing PID file and start AEM
-n, --name string Instance to start (default "local-author")
Global Flags:
-v, --verbose verbose output
-P, --project string Run command for project. (if not current working directory)
Stop AEM instances running.
stop is compatible with the start and stop scripts provided by Adobe.
Usage:
aem stop [flags]
Flags:
-h, --help help for stop
-n, --name string Instance to stop (default "local-author")
Global Flags:
-v, --verbose verbose output
-P, --project string Run command for project. (if not current working directory)
Display information about an instance. This feature is only available from AEM 6.4 or newer.
Usage:
aem system-information [flags]
Aliases:
system-information, sys, sysinfo
Flags:
-r, --allow-root Allow to start as root user (UID: 0)
-d, --download Force re-download
-f, --foreground on't detach aem from current tty
-h, --help help for system-information
--ignore-pid Ignore existing PID file and start AEM
-n, --name string Instance to start (default "local-author")
Global Flags:
-v, --verbose verbose output
-P, --project string Run command for project. (if not current working directory)
Output the current version of the aem command line interface you are using.
Usage:
aem version [flags]
Flags:
-h, --help help for version
-m, --minimal Show the minimal version information
Global Flags:
-v, --verbose verbose output
Set the AEM_ME variable to change the default instance choosen by start, stop and log
export AEM_ME=<instance name>
There are 2 ways to influence the default instance that is selected when not specified as parameter command. The resolution order can be seen below:
- AEM_ME Variable
- config file "defaultInstance" variable
- default name set in application "local-author"
Terminals are fun. Completion in the terminal is even more fun. Add aem-completion.bash
to you completion folder.
or execute the following commands
mkdir ~/.bash-completion
aem shell bash > ~/.bash-completion/aem-completion.bash
echo "source ~/.bash-completion/aem-completion.bash" >> ~/.bashrc
The generated completion script should be put somewhere in your $fpath named _aem. Usage: aem shell zsh [flags]
Aliases:
zsh-completion, zsh
Flags:
-h, --help help for zsh-completion
Global Flags:
-P, --project string Run command for project. (if not current working directory)
-v, --verbose verbose output
Or replace the last line with the following if you use zshell
echo "source ~/.bash-completion/aem-completion.bash" >> ~/.zshrc
This script helps with automaticly booting and stopping AEM when the server starts or stops.
Place the init script in the right location. To set it ready for usage.
cp aem.init /etc/init.d/aem
chown root: /etc/init.d/aem
chmod u+x /etc/init.d/aem
Enable to start automaticly at boot with:
update-rc.d aem defaults
update-rc.d aem enable
- Getopt - For command line parsing
- Go-pretty - For table printing
- Afero - For FileSystem Abstraction
- Progressbar - For progress bar printing
- Go-humanize - Formatters for units to human friendly sizes
- Go-keyring - Store password in operating systems own keyring
- Cobra - Commandline library
- TOML - TOML parser for Golang with reflection.
- Tail - For tailing files
- Survey - For console survey
- Go-colortext - Color text printing
Thank all authors and contributors of these libraries. For publishing such great software.
- Code cleanup
- more code testing and coverage
- combine with lazybones
- Features
- thread dumps
- sling tracer
Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.