maven我怎样才能加载一个。为了读取类文件中的注释,是否将运行jar中的类文件转换为Java对象?
为了得到一个jar文件,我使用maven assembly插件打包了一个maven项目
我将以下java类从src/test/java
(TestNG tests)文件夹打包到一个jar文件中
以下类位于jar内的以下路径中:
target/test-classes/com/example/tests/ByCitiesTest.class
target/test-classes/com/example/tests/FullCycle3HoursTest.class
我可以读取运行jar的这些类的位置,但我想加载这些类,以便读取TestNG注释(例如:@Test,@DataProvider,…)并使用我开发的定制TestRunner运行它们
我使用下面的代码在jar中读取并尝试加载。类文件:
List<XmlClass> classes = new ArrayList<XmlClass>();
Path currentRelativePath = Paths.get("");
String s = currentRelativePath.toAbsolutePath().toString();
System.out.println("Current relative path is: " + s);
CodeSource src = TestRunner.class.getProtectionDomain().getCodeSource();
URL jar = src.getLocation();
JarFile jarFile = new JarFile(jar.getPath());
Enumeration e = jarFile.entries();
if (src != null) {
ZipInputStream zip = new ZipInputStream(jar.openStream());
ZipEntry ze;
while ((ze = zip.getNextEntry()) != null) {
String entryName = ze.getName();
if (entryName.contains("target") && entryName.contains(".class") && entryName.contains("test")) {
System.out.println(entryName);
}
}
}
URL[] urls = {new URL("jar:file:" + jar.getPath() + "!/")};
URLClassLoader cl = URLClassLoader.newInstance(urls);
InputStream in = cl.getResourceAsStream("target/test-classes/com/example/tests/ByCitiesTest.class");
byte[] array = new byte[1024];
ByteArrayOutputStream out = new ByteArrayOutputStream(array.length);
int length = in.read(array);
while (length > 0) {
out.write(array, 0, length);
length = in.read(array);
}
Class testclass = classHandler.defineCustomClass("ByCitiesTest", out);
XmlClass singleClass = new XmlClass(testclass.getName());
classes.add(singleClass);
函数defineCustomClass
public Class defineCustomClass(String name, ByteArrayOutputStream out) {
return defineClass(name, out.toByteArray(), 0, out.size());
}
此函数使用Java ClassLoader
类中的defineClass
我在执行过程中遇到的错误如下:
Current relative path is: /Users/root/path/of/the/project-webdriver
target/test-classes/com/example/BaseByHoursTest.class
target/test-classes/com/example/pages/CardInformationPage.class
target/test-classes/com/example/pages/ConfirmationPage.class
target/test-classes/com/example/pages/ContactPage.class
target/test-classes/com/example/pages/ExtrasPage.class
target/test-classes/com/example/pages/HomePage.class
target/test-classes/com/example/pages/HotelPage.class
target/test-classes/com/example/pages/ResultsPage.class
target/test-classes/com/example/tests/ByCitiesTest.class
target/test-classes/com/example/tests/FullCycle3HoursTest.class
Exception in thread "main" java.lang.NoClassDefFoundError: ByCitiesTest (wrong name: com/example/tests/ByCitiesTest)
我不知道这个班的名字是什么,我怎么知道这个名字。我尝试将文件加载到InputStream
中,然后尝试使用类加载器加载它
如何加载文件。类转换为java类对象? 如何从jar文件中的这些类中读取注释
共 (0) 个答案