testNG jar包启动找不到org.testng.TestNG

主要是因为打包时依赖的jar包没有打入,网上有很多需要将对应的jar单独拷贝出来然后通过classpath引用启动,但是感觉这个就是个无底洞。拷贝了这么多个包最后还是说找不到ObjectId

 

 

 启动命令是(需要cd到这个文件夹下面)

java -classpath test.jar;testng-6.9.4.jar;jcommander-1.64.jar;extentreports-3.0.3.jar;freemarker-2.3.23.jar org.testng.TestNG system_pro.xml

执行结果:

C:\Users\admin\Desktop\test>java -classpath test.jar;testng-6.9.4.jar;jcommander-1.64.jar;extentreports-3.0.3.jar;freemarker-2.3.23.jar org.testng.TestNG system_pro.xml
[TestNG] Running:
  C:\Users\admin\Desktop\test\system_pro.xml


===============================================
Parallel tests
Total tests run: 1, Failures: 1, Skips: 0
===============================================

Exception in thread "main" java.lang.NoClassDefFoundError: org/bson/types/ObjectId
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
        at java.lang.Class.privateGetPublicMethods(Class.java:2902)
        at java.lang.Class.getMethods(Class.java:1615)
        at freemarker.ext.beans.ClassIntrospector.discoverAccessibleMethods(ClassIntrospector.java:464)
        at freemarker.ext.beans.ClassIntrospector.discoverAccessibleMethods(ClassIntrospector.java:457)
        at freemarker.ext.beans.ClassIntrospector.createClassIntrospectionData(ClassIntrospector.java:268)
        at freemarker.ext.beans.ClassIntrospector.get(ClassIntrospector.java:244)
        at freemarker.ext.beans.BeanModel.<init>(BeanModel.java:114)
        at freemarker.ext.beans.BeanModel.<init>(BeanModel.java:104)
        at freemarker.ext.beans.StringModel.<init>(StringModel.java:52)
        at freemarker.ext.beans.StringModel$1.create(StringModel.java:37)
        at freemarker.ext.beans.BeansModelCache.create(BeansModelCache.java:71)
        at freemarker.ext.util.ModelCache.getInstance(ModelCache.java:84)
        at freemarker.ext.beans.BeansWrapper.wrap(BeansWrapper.java:860)
        at freemarker.template.DefaultObjectWrapper.handleUnknownType(DefaultObjectWrapper.java:235)
        at freemarker.template.DefaultObjectWrapper.wrap(DefaultObjectWrapper.java:214)
        at freemarker.template.WrappingTemplateModel.wrap(WrappingTemplateModel.java:105)
        at freemarker.template.DefaultListAdapter.get(DefaultListAdapter.java:75)
        at freemarker.core.DynamicKeyName.dealWithNumericalKey(DynamicKeyName.java:104)
        at freemarker.core.DynamicKeyName._eval(DynamicKeyName.java:69)
        at freemarker.core.Expression.eval(Expression.java:78)
        at freemarker.core.Assignment.accept(Assignment.java:131)
        at freemarker.core.Environment.visit(Environment.java:324)
        at freemarker.core.MixedContent.accept(MixedContent.java:54)
        at freemarker.core.Environment.visitByHiddingParent(Environment.java:345)
        at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:48)
        at freemarker.core.Environment.visit(Environment.java:324)
        at freemarker.core.MixedContent.accept(MixedContent.java:54)
        at freemarker.core.Environment.visit(Environment.java:324)
        at freemarker.core.Environment.process(Environment.java:302)
        at freemarker.template.Template.process(Template.java:325)
        at com.aventstack.extentreports.reporter.ExtentHtmlReporter.flush(ExtentHtmlReporter.java:145)
        at java.util.ArrayList.forEach(ArrayList.java:1249)
        at com.aventstack.extentreports.Report.notifyReporters(Report.java:210)
        at com.aventstack.extentreports.Report.flush(Report.java:132)
        at com.aventstack.extentreports.ExtentReports.flush(ExtentReports.java:261)
        at com.genergy.util.ExtentTestNGIReporterListener.generateReport(ExtentTestNGIReporterListener.java:104)
        at org.testng.TestNG.generateReports(TestNG.java:1090)
        at org.testng.TestNG.run(TestNG.java:1049)
        at org.testng.TestNG.privateMain(TestNG.java:1339)
        at org.testng.TestNG.main(TestNG.java:1308)
Caused by: java.lang.ClassNotFoundException: org.bson.types.ObjectId
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 42 more

不知道哪里出了问题。。。。

另一种解决方法:

maven使用打包插件将依赖的jar包一起打包,pom.xml添加插件:

<build>
        <plugins>
            <plugin>
                <!-- 指定项目编译时的java版本和编码方式 -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <target>1.8</target>
                    <source>1.8</source>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.genergy.Excel2Test</mainClass> <!-- 指定入口类路径 -->
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef> <!-- jar包后缀,生成的jar包形式为:project-1.0-SNAPSHOT-jar-with-dependencies.jar -->
                    </descriptorRefs>
                </configuration>
                <!-- 添加此项后,可直接使用mvn package | mvn install -->
                <!-- 不添加此项,需直接使用mvn package assembly:single -->
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

通过mvn package 打好包之后,将需要执行

这里需要将测试的xml拷贝到和jar包一个路径

 

 然后执行

java -classpath jar包名 org.testng.TestNG xml名
如:
java -classpath genergy-api-test-1.0-SNAPSHOT-jar-with-dependencies.jar org.testng.TestNG system_pro.xml

 

最后生成测试报告在:

 

posted @ 2020-07-09 09:29  木枝木枝  阅读(2443)  评论(0编辑  收藏  举报