Как наилучшим образом организовать структуру такой библиотеки?
- , какую систему сборки использовать (gradle или maven)?
- это будет один проект, скомпилированный и упакованныйодин раз для каждой JVM?
- это будет 3 проекта: mylib-core, mylib-java, mylib-android?
- как собрать, упаковать и распространить библиотеку (или библиотеки)?
- имеет ли смысл использовать OSGi или Spring?
Пример минимального кода
Библиотека с одним API, совместимая и равная для Java SE и Android.
API:
/*
* Given a fonts name, size (height) and a text,
* the library returns the doubled (<- arbitrary) width of the text in pixels.
*/
int fetchTextWidthDoubled(String fontName, int fontSize, String text);
Хотя удвоение размера является обычным кодом и не должно дублироваться, код для извлечения метрик шрифта в Android и Java SE отличается.
Предполагается, что у меня реализованы два класса с требуемым кодом, подобным следующему:
Java SE:
public class JavaSeTextWidthFetcher implements TextWidthFetcher {
@Override
public int fetchTextWidth(String fontName, int fontSize, String text) {
// something with java.awt.Font
}
}
Android:
public class AndroidTextWidthFetcher implements TextWidthFetcher {
@Override
public int fetchTextWidth(String fontName, int fontSize, String text) {
// something with android.graphics.Paint.FontMetrics
}
}
и реализация API примерно такая жеэто:
public class DoubleTextWidthFetcher
private TextWidthFetcher impl;
@Override
public int fetchTextWidthDoubled(String fontName, int fontSize, String text) {
return 2 * impl.fetchTextWidth(fontName, fontSize, text);
}
}