2012-12-31 9 views
6

Należy wziąć pod uwagę powszechny przypadek użycia określonego słoja z wersjami do implementacji metody, ale nie ujawniając żadnych typów z tego słoika w publicznym lub chronionym interfejsie API (tylko w metodach podpisów metod prywatnych).Czy w SBT można automatycznie zmapować pakiety nazw?

Teraz to, czego chcę, to automatyczne łączenie w czasie kompilacji tego kodu poprzez wymodelowanie nazwy oryginalnej nazwy pakietu i zastąpienie go w wygenerowanym kodzie w SBT (ponownie: chcę dodać wtyczkę do SBT lub ustawienie w plik build.sbt, który robi to na każdym sbt compile).

Celem tego jest uniknięcie błędów klasy klasu w wielu możliwych niezgodnych wersjach klas o tej samej nazwie pakietu/klasy. Uwaga: w sytuacji, którą opisuję powyżej, wstawianie lub wymazywanie nazw powinno zawsze działać i pozwalać na przejście do wersji piekło (kosztem większych słoików).

+0

Wygląda na to, że może to być przypadek użycia [Scala Macros] (http://scalamacros.org/)? – logan

+3

To jest to, do czego zwykle służy OSGi. OSGi używa sprytnych sztuczek z ładowaniem klasy zamiast wymazywania nazw, ale osiąga ten sam efekt. –

+0

Nie wiem, w jaki sposób można wykonać równoważnik sbt przeniesienia klasy z wtyczki maven-shade: http://maven.apache.org/plugins/maven-shade-plugin/examples/class-relocation.html – mpilquist

Odpowiedz

2

To brzmi jak coś, co może być zrobione przez ProGuard. Istnieje SBT ProGuard plugin, ale wydaje się, że nie jest aktywnie konserwowany.

Gdybym poradził sobie z tym problemem, osobiście wypróbowałbym niestandardowy program ładujący klasy zamiast rozwiązania problemu z manglingiem.

+0

Proszę wyjaśnić "osobiście mówiąc chciałbym spojrzeć na niestandardowy program ładujący klasy" – samthebest

Powiązane problemy