Hi there, well, looks like the claim “all I need is geb-core JAR” is patently false :( When instead of downloading the JAR manually and putting it to the classpath (which approach I happen to strongly prefer) I use @Grab to get dependences as well, it more-or-less starts working.
There are some version clashes to be resolved through @GrabExclude, too. Seem to be nowhere documented, sigh. Also, it looks like there's no way (or at least, I've found none myself) to load the Safari driver implicitly; seems it must be loaded manually, as shown below (but as always, I might be missing something of importance here). Eventually, this way it seems to work, at least with simple test cases (if anybody tries, do not forget to enable the driver using safaridriver --enable; by my experience must be always done as root, an admin does not suffice, and to spread confusion, instead of “no privilege” or so it reports a bad password): === @Grab('org.gebish:geb-core:7.0') @GrabExclude('org.apache.groovy:groovy-xml') @GrabExclude('org.apache.groovy:groovy-macro') @Grab('org.seleniumhq.selenium:selenium-support:4.25.0') @Grab('org.seleniumhq.selenium:selenium-safari-driver:4.25.0') import geb.Browser import org.openqa.selenium.safari.* Browser.drive(driver:SafariDriver.newInstance(SafariOptions.newInstance())) { ... test case as needed ... }.quit() === All the best, OC > On 17. 10. 2024, at 17:59, OCsite <o...@ocs.cz> wrote: > > Hi there, > > based on the latest debate in the devlist, I'm trying to play with Geb. The > Book of Geb quite explicitly says that all I need is geb-core jar, a > WebDriver driver implementation and the selenium-support jar > <https://gebish.org/manual/current/#installation-usage>, nevertheless, it > does not seem so; it looks like the geb-core JAR does not contain > GebException: > > === > 1065 ocs /tmp> <geb.groovy > import geb.Browser > Browser.drive { > to GebHomePage > manualsMenu.open() > manualsMenu.links[0].click() > at TheBookOfGebPage > } > 1066 ocs /tmp> ls -l *.jar > > -rw-r--r--@ 1 ocs wheel 750068 Oct 17 17:24 geb-core-7.0.jar > -r-xr-xr-x@ 2 ocs staff 174337 Jan 1 2010 selenium-support-4.25.0.jar* > 1067 ocs /tmp> /usr/local/groovy-4.0.21/bin/groovy -cp > geb-core-7.0.jar:selenium-support-4.25.0.jar -d geb > Caught: java.lang.NoClassDefFoundError: geb/error/GebException > ... ... ... > 1068 ocs /tmp> unzip -l geb-core-7.0.jar|fgrep GebException > 1069 ocs /tmp> > === > > What do I do wrong? Thanks! > OC > > === full stack in case it helps, which I seriously doubt: > 1067 ocs /tmp> /usr/local/groovy-4.0.21/bin/groovy -cp > geb-core-7.0.jar:selenium-support-4.25.0.jar -d geb > Caught: java.lang.NoClassDefFoundError: geb/error/GebException > java.lang.NoClassDefFoundError: geb/error/GebException > at java.base/java.lang.ClassLoader.defineClass1(Native Method) > at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017) > at > java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) > at > java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:550) > at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:458) > at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:452) > at java.base/java.security.AccessController.doPrivileged(Native Method) > at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:451) > at org.codehaus.groovy.tools.RootLoader.loadClass(RootLoader.java:143) > at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) > at java.base/java.lang.Class.getDeclaredConstructors0(Native Method) > at > java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3137) > at java.base/java.lang.Class.getDeclaredConstructors(Class.java:2357) > at > org.codehaus.groovy.reflection.CachedClass$2.lambda$initValue$4(CachedClass.java:68) > at java.base/java.security.AccessController.doPrivileged(Native Method) > at > org.codehaus.groovy.reflection.CachedClass.doPrivileged(CachedClass.java:160) > at > org.codehaus.groovy.reflection.CachedClass.access$000(CachedClass.java:45) > at > org.codehaus.groovy.reflection.CachedClass$2.initValue(CachedClass.java:73) > at > org.codehaus.groovy.reflection.CachedClass$2.initValue(CachedClass.java:63) > at > org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:50) > at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:37) > at > org.codehaus.groovy.reflection.CachedClass.getConstructors(CachedClass.java:276) > at groovy.lang.MetaClassImpl.<init>(MetaClassImpl.java:232) > at groovy.lang.MetaClassImpl.<init>(MetaClassImpl.java:242) > at > groovy.lang.MetaClassRegistry$MetaClassCreationHandle.createNormalMetaClass(MetaClassRegistry.java:166) > at > groovy.lang.MetaClassRegistry$MetaClassCreationHandle.createWithCustomLookup(MetaClassRegistry.java:156) > at > groovy.lang.MetaClassRegistry$MetaClassCreationHandle.create(MetaClassRegistry.java:139) > at > org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:271) > at > org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:314) > at > org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:269) > at > org.codehaus.groovy.vmplugin.v8.Selector$MethodSelector.getMetaClass(Selector.java:575) > at > org.codehaus.groovy.vmplugin.v8.Selector$MethodSelector.setCallSiteTarget(Selector.java:1020) > at > org.codehaus.groovy.vmplugin.v8.IndyInterface.fallback(IndyInterface.java:360) > at > org.codehaus.groovy.vmplugin.v8.IndyInterface.access$000(IndyInterface.java:50) > at > org.codehaus.groovy.vmplugin.v8.IndyInterface$FallbackSupplier.get(IndyInterface.java:282) > at > org.codehaus.groovy.vmplugin.v8.IndyInterface.lambda$fromCache$1(IndyInterface.java:304) > at > org.codehaus.groovy.vmplugin.v8.CacheableCallSite.getAndPut(CacheableCallSite.java:70) > at > org.codehaus.groovy.vmplugin.v8.IndyInterface.lambda$fromCache$2(IndyInterface.java:301) > at > org.codehaus.groovy.vmplugin.v8.IndyInterface.doWithCallSite(IndyInterface.java:376) > at > org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:298) > at geb.run(geb.groovy:2) > at > groovy.lang.GroovyShell.runScriptOrMainOrTestOrRunnable(GroovyShell.java:287) > at groovy.lang.GroovyShell.run(GroovyShell.java:393) > at groovy.lang.GroovyShell.run(GroovyShell.java:382) > at groovy.ui.GroovyMain.processOnce(GroovyMain.java:649) > at groovy.ui.GroovyMain.run(GroovyMain.java:389) > at groovy.ui.GroovyMain.access$1400(GroovyMain.java:67) > at groovy.ui.GroovyMain$GroovyCommand.process(GroovyMain.java:313) > at groovy.ui.GroovyMain.processArgs(GroovyMain.java:141) > at groovy.ui.GroovyMain.main(GroovyMain.java:114) > at > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.base/java.lang.reflect.Method.invoke(Method.java:566) > at > org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:115) > at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:37) > Caused by: java.lang.ClassNotFoundException: geb.error.GebException > at org.codehaus.groovy.tools.RootLoader.findClass(RootLoader.java:180) > at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589) > at org.codehaus.groovy.tools.RootLoader.loadClass(RootLoader.java:148) > at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) > ... 56 more >