Regarding your first problem, not being able to have static methods in the interface, my suggestion is to simply use the interface has a marker and instantiate it.
You're plugin interface can simply be:
public interface Plugin {
public void executePlugin(String args[]);
}
And then you can do:
if (someClass instanceOf Plugin) {
mylist.add(someClass.newInstance());
}
This leads to the second question, how will you get the someClass reference.
There is no standard way to find all classes implementing a given interface in your classpath, although, an approach you can do is scan the jars in your classpath, if a given file ends with .class determine it's full qualified name through it's path inside the jar and use Class.forName() method to materialize the Class.
In pseudo code something like this:
for each jar in your classpath {
for each file in JarFile {
if (file ends with .class) {
materialize class using Class.forName
}
}
}
With the Class instance you can check if it's implementing your Plugin interface.
Also keep in mind that if you need to add any context to your plugins you can create a constructor in every plugin that receives your context object, instead of having the default constructor. In such case instead of using newInstance() you would have to get the constructor with arguments you wanted via reflection.