Ручная компиляция исходного кода java

Разберемся, как в ручную откомпилировать программу. 
Допустим, имеется следующая структура папок: 
src -> ru -> golov -> main -> Main.java, 
src -> ru -> golov -> io -> Printer.java
classes -> .
Файл Main.java:
package ru.golov.main;

import ru.golov.io.*;

public class Main {
    public static void main(String[] args) {
        Printer printer = new Printer();
        printer.print("Hello world!");
    }
}

Файл Printer.java:

package ru.golov.io;

public class Printer {
    public void print(String s) {
        System.out.println(s);
    }
}
Выходим в корневой каталог, компилируем программу: javac -d classes -cp src src/ru/golov/main/Main.java classpath указывается для того, чтобы компилятор понимал, относительно какой директории делаются импорты. Флаг -d говорит о том, что скомпилированные class - файлы должны быть расположены в дирректории classes.
Для того, чтобы запустить программу:
java -cp ./classes ru.golov.main.Main