Можно ли автоматически загружать пользовательские классы в интерпретатор groovy? - PullRequest
1 голос
/ 28 июня 2010

Есть ли способ автоматически загружать пользовательские классы в интерпретаторе groovy, как автоматически загружается System.out (поэтому вам не нужно импортировать System.out для использования println)?Я хочу иметь возможность писать сценарии, использующие пользовательские классы, и запускать сценарии в интерпретаторе groovy без необходимости импорта всех классов все время.

Ответы [ 2 ]

2 голосов
/ 28 июня 2010

Да, вам просто нужно создать файл профиля / RC. Просто создайте файл в ~ / .groovy / groovysh.profile и поместите туда свой импорт. Вы также должны убедиться, что любые дополнительные классы, которые вы хотите включить, являются частью вашего CLASSPATH.

Например: ~ / .groovy / groovysh.profile:

import org.apache.commons.lang.StringUtils

println "in groovysh.profile"

Затем запустите groovysh и используйте метод из StringUtils:

% groovysh
in groovysh.profile
Groovy Shell (1.7.3, JVM: 1.6.0_20)
Type 'help' or '\h' for help.
---------------------------------------------------------------------------------------------------------------------------------
groovy:000> StringUtils.isWhitespace("    ")
===> true
groovy:000> 

Вы можете видеть, что импорт выполнен (и что он также распечатал отпечаток, который я имел в профиле. Этот пример будет работать, только если у вас есть файл jar commons-lang в вашем classpath.

Подробнее см. На странице 1011 * Groovy Shell .

0 голосов
/ 28 июня 2010

Groovy добавляет в Object несколько методов, включая такие методы, как println и printf, которые вы ожидаете от printWriters.Они неявно используют System.out.Это действительно то, что делает groovy, если чувствует, что System.out доступен глобально.

Если вы хотите импортировать набор классов по умолчанию, чтобы их можно было использовать без указания полного имени пакета, комментарий Теда о groovyshПрименяется .profile.

Однако, если вы хотите, чтобы конкретный объект, например System.out, был доступен глобально, чтобы его методы можно было вызывать без ссылки на объект, вы можете добавить некоторые динамические методы в Object.Например, чтобы сделать методы ведения журнала глобального регистратора JDK по умолчанию доступными глобально:

Object.metaClass.info = { String message ->
    java.util.logging.Logger.global.info(message)
}
Object.metaClass.warning = { String message ->
    java.util.logging.Logger.global.warning(message)
}
Object.metaClass.severe = { String message ->
    java.util.logging.Logger.global.severe(message)
}
etc...

После применения этих методов к метаклассу базового объекта любой объект может вызвать info("message") и эффективно его зарегистрировать.сделать Logger.global доступным так же, как System.out.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...