Я полагаю, что самый простой способ - сравнить текущее имя класса (используя class.simpleName
) с фактическим именем исполняемого скрипта файла. Вот пример:
давайте создадим первый класс в файле M.groovy
:
class M {
static main(args){
def m = new M()
}
def M(){
def thisClass = this.getClass().simpleName
def callingClass = new File(getClass().protectionDomain.codeSource.location.path).name.with{ it.take(it.lastIndexOf('.')) }
println("thisClass: ${thisClass}, callingClass: ${callingClass}")
if (thisClass == callingClass){
println 'Calling from M class...'
} else {
println 'Calling from outside.'
}
}
}
Теперь из внешнего класса, например, T.groovy
, вы можете вызвать экземпляр класса M
: new M()
.когда вы выполните M.groovy
, вы получите:
thisClass: M, callingClass: M
Calling from M class...
, а при запуске groovy T.groovy
вы получите:
thisClass: M, callingClass: T
Calling from outside.
Надеюсь, это поможет.