从限制性项目中解析Groovy脚本绑定到框架/ IDE

问题描述

问题

我正在将一个项目从Katalon Studio项目(封闭系统)移植到更标准的Groovy项目。当前,我正在尝试构建一个自动化工具,该工具将解析我的脚本和类以提供对结构和语法的更改。目前,由于无法从Katalon Studio外部构建文件(如果将项目导入到IntelliJ之类的文件,则无法构建),解析普通的脚本非常困难。

客观

目标是能够以某种方式解析脚本而不需要自定义解析器(Groovy会使这变得相当困难,因为它在语法上比较松懈)。

Katalon Studio项目摘要

它的设置类似于Eclipse项目。我在下面粘贴了类路径。 .class文件位于bin/keyword中。

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    <classpathentry kind="src" output="bin/keyword" path="Keywords"/>
    <classpathentry kind="src" output="bin/listener" path="Test Listeners"/>
    <classpathentry kind="src" output="bin/lib" path="Libs"/>
    <classpathentry kind="src" output="bin/groovy" path="Include/scripts/groovy"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.kms.katalon.core_1.0.0.202004070746.jar">
        <attributes>
            <attribute name="javadoc_location" value="file:/C:/Program%20Files/Katalon%20Studio/configuration/resources/apidocs/com.kms.katalon.core/"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/aalto-xml-1.0.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/aspectjweaver-1.9.1.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/bcpkix-jdk15on-1.58.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/bcprov-jdk15on-1.58.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/browsermob-core-2.1.5.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/cglib-3.2.10.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/commons-codec-1.10.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/commons-collections4-4.1.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/commons-validator-1.6.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/curvesapi-1.04.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/dnsjava-2.1.8.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/java-client-7.0.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/jna-4.1.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/jna-platform-4.1.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/jzlib-1.1.3.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/kat-server.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/littleproxy-1.1.0-beta-bmp-17.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/mitm-2.1.5.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/netty-all-4.0.51.Final.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/poi-3.17.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/poi-ooxml-3.17.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/poi-ooxml-schemas-3.17.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/proxy-vole-1.0.4-SNAPSHOT-jar-with-dependencies.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/repackaged-sikuli-api-1.0.2-standalone.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/selenium-leg-rc-3.141.59.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/selenium-server-standalone-3.141.59.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/slf4j-api-1.7.25.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/soap-builder-1.0.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/soap-common-1.0.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/soap-legacy-1.0.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/spring-context-5.1.0.RELEASE.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/stax-api-1.0.1.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/stax2-api-4.0.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/testng-6.11.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/configuration/resources/lib/xmlbeans-2.6.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/net.sf.supercsv.super-csv_2.1.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.dom4j_1.6.1.v201312101416.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.apache.commons.io_2.4.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.apache.commons.lang_2.6.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.apache.xmlbeans_2.6.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.google.gson_2.8.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.jsoup_1.7.2.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.microsoft.sqlserver.sqljdbc4_4.1.5605.100.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.apache.commons.dbutils_1.6.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.oracle.jdbc.ojdbc7_12.1.0.2.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.postgresql.jdbc41_9.4.1208.jre7.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.eclipse.osgi_3.11.3.v20170209-1843.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.kms.katalon.constant_1.0.0.202004070746.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.eclipse.persistence.eclipselink_2.5.0.RC1.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.kms.katalon.selenium-standalone_1.0.0.202004070746.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/atu.testrecorder.screen-recorder_2.1.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.google.guava_23.0.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.kms.katalon.util_1.0.0.202004070746.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.apache.httpcomponents.httpclient_4.5.1.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.apache.httpcomponents.httpcore_4.4.4.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.apache.httpcomponents.httpmime_4.5.1.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.apache.commons.lang3_3.6.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.greenrobot.eventbus_3.1.1.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.assertj.core_3.10.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.junit_4.12.0.v201504281640/junit.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.fasterxml.jackson.core.jackson-databind_2.9.1.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.fasterxml.jackson.core.jackson-core_2.9.6.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.fasterxml.jackson.core.jackson-annotations_2.9.1.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/ch.qos.logback.classic_1.2.3.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/ch.qos.logback.core_1.2.3.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/slf4j.api_1.7.25.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.fusesource.jansi_1.17.1.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.kms.katalon.netlightbody_1.0.0.202004070746.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.kms.katalon.poi_1.0.0.202004070746.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/xml-apis_1.4.1.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.apache.commons.commons-text_1.6.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.MysqL.cj_8.0.17.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.kms.katalon.proxyvole_1.0.0.202004070746.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.apache.commons.codec_1.7.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.apache.commons.logging_1.2.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.hamcrest.core_1.3.0.v201303031735.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.beanshell.bsh_2.0.0.0b4.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.apache.ant.launcher_1.9.6.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.kms.katalon.core.appium_1.0.0.202004070746.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.eclipse.equinox.common_3.8.0.v20160509-1230.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.kms.katalon.core.webui_1.0.0.202004070746.jar">
        <attributes>
            <attribute name="javadoc_location" value="file:/C:/Program%20Files/Katalon%20Studio/configuration/resources/apidocs/com.kms.katalon.core.webui/"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.json_20140107.0.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.kms.katalon.core.mobile_1.0.0.202004070746.jar">
        <attributes>
            <attribute name="javadoc_location" value="file:/C:/Program%20Files/Katalon%20Studio/configuration/resources/apidocs/com.kms.katalon.core.mobile/"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/org.apache.commons.validator_1.5.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.kms.katalon.core.cucumber_1.0.0.202004070746.jar">
        <attributes>
            <attribute name="javadoc_location" value="file:/C:/Program%20Files/Katalon%20Studio/configuration/resources/apidocs/com.kms.katalon.core.cucumber/"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/io.cucumber.core_3.0.2.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/io.cucumber.datatable_1.0.3.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/io.cucumber.datatable-dependencies_1.0.3.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/io.cucumber.expressions_5.0.19.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/io.cucumber.gherkin_5.0.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/io.cucumber.html_0.2.7.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/io.cucumber.java_3.0.2.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/io.cucumber.tag-expressions_1.1.1.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/io.cucumber.junit_3.0.2.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.kms.katalon.core.webservice_1.0.0.202004070746.jar">
        <attributes>
            <attribute name="javadoc_location" value="file:/C:/Program%20Files/Katalon%20Studio/configuration/resources/apidocs/com.kms.katalon.core.webservice/"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/wsdl4j_1.6.2.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.google.oauth-client.google-oauth-client_1.22.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.google.http-client.google-http-client_1.22.0.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/ca.juliusdavies.not-yet-commons-ssl_0.3.11.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.kms.katalon.preferences_1.0.0.202004070746.jar"/>
    <classpathentry kind="lib" path="C:/Program Files/Katalon Studio/plugins/com.kms.katalon.core.windows_1.0.0.202004070746.jar">
        <attributes>
            <attribute name="javadoc_location" value="file:/C:/Program%20Files/Katalon%20Studio/configuration/resources/apidocs/com.kms.katalon.core.windows/"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="lib" path="C:/Users/myUsername/git/myProj/Drivers/ashot-1.5.4.jar"/>
    <classpathentry kind="lib" path="C:/Users/myUsername/git/myProj/Drivers/javax.mail.jar"/>
    <classpathentry kind="lib" path="C:/Users/myUsername/git/myProj/Drivers/jcommon-1.0.23.jar"/>
    <classpathentry kind="lib" path="C:/Users/myUsername/git/myProj/Drivers/jfreechart-1.5.0.jar"/>
    <classpathentry exported="true" kind="con" path="GROOVY_SUPPORT"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

(失败)尝试

我已经尝试通过尝试使用源代码来尝试使用groovydocTool,GroovyClassLoader,groovyshell,但是坦白地说,我不知道自己在做什么,并且没有多少文档可供参考。我最终尝试的是本网站上其他答案的汇编,可能不正确。

我尝试过的方法(可能是错误的):

注意-在Katalon软件结构中,类称为“关键字”

String[] sources =
                [
                        '/git/myProj/Keywords','/git/myProj/Scripts',]
groovydocTool docTool = new groovydocTool(sources)
GroovyRootDoc rootDoc = docTool.getRootDoc()
println rootDoc.specifiedPackages()
println rootDoc.specifiedClasses()
for (GroovyPackageDoc p in rootDoc.classes()) {
    // This loop is never entered
    GroovyClassDoc[] allClasses = p.allClasses()
    for (GroovyClassDoc c in allClasses) {
        log(c.getFullPathName() + '\n')
    }
}

输出(全部为空):

refactoringtool.script.ScriptParser.par  []
refactoringtool.script.ScriptParser.par  null

下面是使用GroovyClassLoader和groovyshell的尝试。它们可以运行,但是它们无法通过导入语句。

File classDir = new File(baseDir + '/git/myProj/.classpath')
String classpath = classDir.toString()
println "classpath: ${classpath}"

File binDir = new File(baseDir + '/git/myProj/bin')
String binPath = binDir.toString()
println "binDir: ${binPath}"

File keywordDir = new File(baseDir + '/git/myProj/bin/keyword')
String keywordpath = keywordDir.toString()
println "keywordDir: ${keywordpath}"

GroovyClassLoader classLoader = new GroovyClassLoader()
classLoader.addClasspath(classpath)
classLoader.addClasspath(binPath)
println "Added classpath:\n${classLoader.getClasspath()}"
println "Loaded classes:\n${classLoader.getLoadedClasses()*.getName()}"
groovyshell shell = new groovyshell(classLoader)
Script script = shell.parse(fileText)

例外:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup Failed:
Script1.groovy: 2: unable to resolve class com.myClass
 @ line 2,column 1.
   import com.myClass
   ^

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)