2012-08-08 12 views
9

Wiem, że od Groovy 2.0 są adnotacje do kompilacji statycznej. Łatwo jednak pominąć takie adnotacje przez przypadek i nadal napotykać problemy.Czy jest jakaś globalna flaga dla kompilacji statycznej Groovy?

Czy istnieje sposób na osiągnięcie przeciwnego zachowania się kompilatora, na przykład kompilacja statycznych wszystkich plików projektu domyślnie i kompilacja tylko plików dynamicznych wybranych celowo za pomocą jakiejś adnotacji @CompileDynamic na przykład?

Odpowiedz

5

Nie w tej chwili, ale jest open Jira issue here można wykonać, aby obserwować postępy tej funkcji

Była też dyskusja na temat sposobów wykonywania tej on the Groovy developers list

+0

Dziękuję, właśnie przegrałem sprawę JIRA, a teraz nadążam za nią. – topr

+3

https://issues.apache.org/jira/browse/GROOVY-5503 –

+2

Jak wspomniano w @topr, jest to obecnie funkcja w wersji 2.1 lub nowszej, może warto zaktualizować odpowiedź dla przyszłych użytkowników. – Terence

11

Znalazłem kilka (wierzę niedawno wprowadzono) cechę, która pozwala to zrobić z Gradle.

W build.gradle pliku do projektu zawierającego źródła odjechane musimy dodać następujące wiersze:

compileGroovy { 
    configure(groovyOptions) { 
     configurationScript = file("$rootDir/config/groovy/compiler-config.groovy") 
    } 
} 

lub compileTestGroovy { ... stosowania samo źródeł badawczych. Należy pamiętać, że ani kompilacja statyczna, ani sprawdzanie typów nie działa dobrze w Spock Framework. Spock z natury wykorzystuje dynamiczną "groovyness".

Następnie w katalogu głównym projektu Utwórz folder config/groovy/ oraz plik o nazwie kompilator config.groovy wewnątrz. Zawartość pliku jest następujący:

import groovy.transform.CompileStatic 

withConfig(configuration) { 
    ast(CompileStatic) 
} 

Oczywiście ścieżka i nazwa configurationScript mogą się różnić i to do ciebie. Nie powinno to raczej iść do tego samego src/main/groovy, choć mogłoby to doprowadzić do zmieszania całkowicie oddzielnych problemów.

To samo można zrobić z groovy.transform.TypeChecked lub inną adnotacją, oczywiście.

Aby odwrócić stosowane zachowanie w niektórych klasach lub metodach, można użyć odpowiednio adnotacji @CompileDynamic lub @TypeChecked(TypeCheckingMode.SKIP).

Nie jestem pewien, jak osiągnąć to samo, gdy Gradle nie jest używany jako narzędzie do kompilacji. Mogę jednak zaktualizować tę odpowiedź w przyszłości za pomocą takich informacji.

+1

Hej, czy to jest napisane gdzieś w dokumentach Groovy'ego? Czy możesz podać źródło tego rozwiązania? – ThanosFisherman

Powiązane problemy