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).

Thanks,
Andriy

On Fri, Mar 18, 2022 at 12:46 PM Jochen Theodorou <blackd...@gmx.org> wrote:

> On 18.03.22 15:32, Andriy Rysin wrote:
> > This approach may work well for simple file include but if I have
> > packages (and import statements, which is inevitable if program grows)
> > it does not compile.
>
> Let me explain my suggestion in more detail.
>
> you want to start a script Loader.groovy with groovy
> /path/to/scripts/Loader.groovy <myfile>
>
> The loader could look something like this:
>
> > import java.nio.file.Path
> >
> > @groovy.transform.SourceURI def sourceURI
> > assert sourceURI instanceof java.net.URI
> > def url =  Path.of(sourceURI.path).parent.toUri().toURL()
> > def gcl = new GroovyClassLoader(this.class.classLoader)
> > gcl.addURL(url)
> > def c = gcl.loadClass("TagText")
> > c.main(this.args)
>
> Here I load the class TagText written in Groovy, no precompiled. Using
> sourceURI I found the directory where Loader.groovy resides in as url.
> Then I spawn a new class loader which knows this directory and let it
> load my actual main class TagText. For this to work TagText has to be in
> the same director as Loader. Should TagText be in a package, you have to
> use the package name as well of course. For example foo/TagText.groovy
> should have the package foo and then I would have to do
> loadClass("foo.TagText") to load it.
>
> This way I can load TagText from anywhere using Loader, as TagText is in
> a known relative position to Loader.
>
> TagText can then of course have further dependencies. You can also add
> jars this way (you have to produce an url with jar protocol then I think)
>
> BTW: this.args passes through the arguments. This way <myfile> is passed
> to TagText.
>
> bye Jochen
>
>

Reply via email to