gpt4 book ai didi

Java 项目到 Groovy - 库不起作用

转载 作者:行者123 更新时间:2023-12-02 02:37:55 25 4
gpt4 key购买 nike

我用 java 编写了一个程序,现在我想使用 groovy 运行它。我这样做是为了练习,所以不要质疑为什么我一开始没有用 groovy 进行编程。 ;)

我在java中使用了很多库,所以我将它们复制到%GROOVY_HOME%\lib目录中。执行此操作后,我无法再运行 groovyConsole.exe,因此运行 groovyConsole.bat(使用 cmd)来获取错误,如下所示:

C:\Program Files (x86)\Groovy\Groovy-2.4.11\bin>groovyConsole.bat
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:109)
at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:131)
Caused by: javax.xml.parsers.FactoryConfigurationError: java.lang.ClassNotFoundException: org.apache.crimson.jaxp.SAXParserFactoryImpl
at javax.xml.parsers.SAXParserFactory.newInstance(SAXParserFactory.java:116)
at org.apache.ivy.core.settings.XmlSettingsParser.doParse(XmlSettingsParser.java:160)
at org.apache.ivy.core.settings.XmlSettingsParser.parse(XmlSettingsParser.java:150)
at org.apache.ivy.core.settings.IvySettings.load(IvySettings.java:417)
at org.apache.ivy.core.settings.IvySettings$load.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at groovy.grape.GrapeIvy.<init>(GrapeIvy.groovy:97)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at groovy.grape.Grape.getInstance(Grape.java:121)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:1850)
at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:3758)
at org.codehaus.groovy.runtime.callsite.ClassMetaClassGetPropertySite.getProperty(ClassMetaClassGetPropertySite.java:51)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:296)
at groovy.ui.ConsoleIvyPlugin.addListener(ConsoleIvyPlugin.groovy:44)
at groovy.ui.ConsoleIvyPlugin$addListener.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at groovy.ui.Console.<init>(Console.groovy:242)
at groovy.ui.Console.<init>(Console.groovy:224)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:83)
at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:105)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:60)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:235)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:247)
at groovy.ui.Console.main(Console.groovy:209)
... 6 more

我使用的库在使用 java 的 eclipse 中工作得很好。我能做什么?

附加问题:

我找到了一种通过加载文件来使用库的方法。有没有办法加载包含 jar 文件的整个目录?

this.getClass().classLoader.rootLoader.addURL(new File("file.jar").toURL())

最佳答案

您不应将脚本依赖项添加到 %GROOVY_HOME%/lib

您应该更改脚本来声明它所需的依赖项。

一种方法是像您所发现的那样,将 JAR URL 添加到类加载器。如果要添加目录,请列出该目录并迭代 JAR 文件,例如 new File('path/to/dir').eachFileMatch('*.jar') { ...addURL(it .toURI().toURL()) }.

顺便说一句。正如您在我的示例中看到的,您永远不应该使用 File.toURL(),这已被弃用很长时间了。始终使用 File.toURI().toURL() 代替。

除此之外,Groovy 脚本中还有一个更好的依赖库的方法,那就是 Grape。您可以在 http://groovy-lang.org/grape.html 阅读更多相关信息。 。基本上,您只需使用注释声明依赖项,它们就会自动从 Maven 存储库下载并添加到脚本的类路径中,包括任何传递依赖项。

关于Java 项目到 Groovy - 库不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45977851/

25 4 0
文章推荐: java - Graphql 接受用户定义对象列表
文章推荐: java - 大堆上最坏情况垃圾收集持续时间大约是多少
文章推荐: java - 从不同的类调用 TextToSpeech
文章推荐: java - 如何使用 hibernate 在不迭代的情况下将 List 插入数据库?