Как выполнить некоторый код, когда gradle строит тесты

У Kotlin есть плагин компилятора, который называется all open . Это заставляет открывать все классы с некоторыми аннотациями.

Я хочу использовать эту функцию для своих тестов, но я не хочу этого в своем производственном коде (я хочу, чтобы мои классы закрывались). Как я могу это сделать?

Я попробовал что-то вроде:

test { allOpen { annotation('com.my.Annotation') } } 

Но код выполняется всегда.

Это происходит потому, что плагин применяется в корне файла build.gradle .

Решение, которое будет работать на 100%, – это не применять плагин, если не задано какое-либо свойство проекта.

 if (project.hasProperty("allopen")) { apply plugin: "kotlin-allopen" allOpen { annotation('com.my.Annotation') } } 

и запустить тест со свойством: gradle -Pallopen test .

Возможно, некоторые гуру Gradle могут прослушивать лучшее решение.

Intereting Posts
Не могли бы вы объяснить забавный запросByZipCode? Посылка: неспособность маршалировать стоимость Не удается реализовать интерфейс kotlin Классы Котлина, содержащие андроид-расширения, не построенные на последовательных строках Передача экземпляра объекта между двумя действиями в Котлине Включение безопасности глобальной безопасности Spring Security нарушает инъекцию зависимостей (с Kotlin) Пользовательские аннотации Proguard в Kotlin Как отправить уведомление от IntentService на Android с помощью Kotlin Как сделать закрытые классы родовыми в котлин? Использование LiveData с привязкой данных Вымытый объект, все еще вызывающий метод (Mockito + Kotlin) Можете ли вы использовать объект, который синхронизирован как блокировка Kotlin + Spring загрузка запроса сортировки Неразрешенная ссылка: kotlinx – Kotlin 1-0-0-rc-1036 Recruit-MP LightCalendarView – ошибка раздувания класса, noSuchMethodException