Hi Jochen and all,

so a while ago my groovy script grew (big enough) and I had to split it
into multiple classes. But I wanted my users to still be able to run it
with a simple command (e.g. ./TagText.groovy on Linux and groovy
TagText.groovy on Windows).

So now all my scripts have a wrapper, example of one of them is below - the
main script was called TagText.groovy and now the main functionality moved
to TagTextCore.groovy.
This works, but I had to add such a wrapper to all scripts like that. And I
feel that this type of code does not belong in the apps - this is
system-level functionality.

Regards,
Andriy

@CompileStatic

class TagText {


@groovy.transform.SourceURI

static URI SOURCE_URI

static String SCRIPT_DIR=new File(SOURCE_URI).parent


static void main(String[] args) {

long tm1 = System.currentTimeMillis()

def cl = new GroovyClassLoader()

cl.addClasspath(SCRIPT_DIR + "/../../../../")


def resourceDir = SCRIPT_DIR + "/../../../../../resources"

if( ! new File(resourceDir).isDirectory() ) {
new File(resourceDir).mkdirs()

}

cl.addClasspath(resourceDir)

def basePkg = TagText.class.getPackageName()

def tagTextClass = cl.loadClass("${basePkg}.tag.TagTextCore")

def m = tagTextClass.getMethod("main", String[].class)

def mArgs = [args].toArray() // new Object[]{args} - Eclipse chokes on this


m.invoke(null, mArgs)

}

}

On Thu, Mar 24, 2022 at 3:25 AM Jochen Theodorou <blackd...@gmx.org> wrote:

> Hi Andriy,
>
> We can add an option, that is then changing the compiler configuration
> and a transform could react to that to add a path to the classpath
> (package corrected of course) This is certainly possible.
>
> bye Jochen
>
>
> On 23.03.22 16:37, Andriy Rysin wrote:
> > I wonder if the 'groovy' executable could be smart enough to detect: if
> > I am running src/pkg1/main.groovy and there's "package pkg1" in that
> > script that we need to add src/ to classpath.
> > But I guess for that groovy would have to compile it first so it's a
> > chicken and egg problem
> >
> > Andriy
> >
> > On Mon, Mar 21, 2022 at 3:41 PM Jochen Theodorou <blackd...@gmx.org
> > <mailto:blackd...@gmx.org>> wrote:
> >
> >     On 21.03.22 15:26, Andriy Rysin wrote:
> >      > Ah, sorry I didn't get it at first. Technically if we need extra
> >     wrapper
> >      > to start a program I could probably do a shell/bat scripts. I was
> >     hoping
> >      > we could use the same command (I have other tools that are
> invoked by
> >      > their groovy file, so I was trying to keep the more complex one
> >     the same).
> >
> >     It surely would not be impossible to make a global transform, which
> >     helps the compiler with the setup. But this global transform would
> have
> >     to be on the classpath. And that could be done by placing it in
> >     ~/.groovy/lib/
> >
> >     The transform would then add the source path to the classpath for the
> >     compiler used for the compilation during the conversion phase. Still
> >     requires a one-time setup step of course.
> >
> >     Out of the box I think we have no solution for this really.
> >
> >     bye Jochen
> >
>
>

Reply via email to