Я недавно возился с ClassLoaders в java, пытаясь запустить код сценария автоматизации, который использует динамическую загрузку классов и получение ClassNotFoundException
.Получение ClassNotFoundException при использовании Class.forName ("com.actitime5.Testcases." + Vriable);
##MyCode
package com.actitime5.frameworkengine;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import com.gmail5.Testcases.LoginLogout;
import org.junit.runner.JUnitCore;
public class Init {
public static void main(String args[]) throws Exception
{
Init in=new Init();
String url=in.getConfigValue("url");
ExcelLibrary lib=new ExcelLibrary();
JUnitCore core = new JUnitCore();
int numberofTestcases=lib.getRowCont("Scenario");
System.out.println(numberofTestcases);
for(int i=1;i<=numberofTestcases;i++)
{String status=lib.getExcelData("Scenario", i, 1);
if(status.equals("yes"))
{String scriptnam=lib.getExcelData("Scenario", i, 0);
System.out.println("Sheet Name"+" "+scriptnam);
Class scriptToRun= Class.forName("com.gmail5.Testcases."+scriptnam);
core.run(scriptToRun);
}
}}
##Errors that i am getting :
1
Sheet Name LoginLogout
Exception in thread "main" java.lang.ClassNotFoundException:com.gmail5.Testcases.LoginLogout
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at com.gmail5.frameworkengine.Init.main(Init.java:24)
Класс, который я пытаюсь загрузить доступен в пакете: com.gmail5.Testcases.*;
, но все же он бросает исключение
Можете ли вы опубликовать полный код для 'LoginLogout'? Также отредактируйте свой вопрос, чтобы показать нам, как вы запускаете эту вещь. –
Добавьте код, чтобы распечатать полное имя, которое вы передаете 'forName', чтобы вы могли проверить его правильность. И временно отредактируйте замену для двух последних строк как «core.run (com.gmail5.Testcases.MyMissingClass.class);», чтобы убедиться, что это работает. (Если нет, MyMissingClass не находится должным образом в структуре каталогов.) –