Writing a Liquibase custom executor for use with runWith

Hello! I am looking to write a custom executor for use with the runWith attribute. I have already explored the AbstractExecutor class and think I have a good understanding of what I need to write in order for the executor to function. However, where I am getting stuck is how I get the executor recognized by liquibase. I thought liquibase.executor was the correct package to put the class in:

package liquibase.executor;

import ...

public class MyTestExecutor extends AbstractExecutor {

    /**
     * Return the name of the Executor
     *
     * @return String   The Executor name
     */
    @Override
    public String getName() {
        return "mytest";
    }

    /**
     * Return the Executor priority
     *
     * @return int      The Executor priority
     */
    @Override
    public int getPriority() {
        return 999999999;
    }
...

So on and so forth. I am happy to develop the rest of the executor on my own… I just can’t get Liquibase to recognize my executor. When I run a test, i get the error

Unable to locate Executor 'mytest' for changeset 'test2.sql::2.1::jlyle'

Note: I am running this through IntelliJ Idea so that I can use debugging to help me on my way. I am placing the class file at liquibase-core/src/main/java/liquibase/executor/MyTestExecutor.java

Any help would be greatly appreciated!

Any links to documentation/guides on writing custom executors would be wonderful as well!

Ah, I was following posts about the old way that extension discovery worked. When I found out that liquibase 4+ uses the META-INF/services directory and set that up, everything started working just fine.