create subclass for basic publish, make base abstract
move classes to separate files
use solutiondir property in package path to facilitate using project as submodule