[英]ClassPathXmlApplicationContext from a Runtime.getRuntime.exec
我使用eclipse開發了一個Web應用程序以處理依賴項注入和要部署的Maven。 我正在努力使這個小代碼:
public class MainExternal {
public static void main( String[] args ) throws Exception{
@SuppressWarnings("resource") ApplicationContext appContext = new ClassPathXmlApplicationContext( "classpath*:webConfiguration/applicationContext.xml"); ProjectBo projectBo = (ProjectBo) appContext.getBean("projectBo");
System.out.println("-> Im 'in ");
/************* PRINT OUT *************/
Project project = projectBo.findByNameOfStudy("Profiler");
List<User> listUser = (List<User>) projectBo.findUsers(project);
for (User myUser : listUser) {
System.out.println("User :"+myUser.getFirstname());
}
}
當我在Eclipse中運行它時,它可以工作。
但是,當我像下面那樣從Web應用程序調用它時,它不起作用:
public void throwAnalyse(){
System.out.println("->I call my function");
try {
String[] command= {"java","-cp", "/Users/JP/git/CleanOmicsTracer/target/CleanOmicsTracer.jar", "com.clb.genomic.lyon.external.MainExternal"};
Process p = Runtime.getRuntime().exec(command);
////////////////////////////////////////////
//test for remote command
String line;
BufferedReader bri = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader bre = new BufferedReader(new InputStreamReader(p.getErrorStream()));
while ((line = bri.readLine()) != null) {
System.out.println(line);
}
bri.close();
while ((line = bre.readLine()) != null) {
System.out.println(line);
}
bre.close();
p.waitFor();
} catch (IOException e) { e.printStackTrace();
} catch (InterruptedException e) { e.printStackTrace(); }
System.out.println("End of programme");
}
當我嘗試從控制台執行為:
java -cp /Users/JP/git/CleanOmicsTracer/target/CleanOmicsTracer.jar com.clb.genomic.lyon.external.MainExternal
它不再起作用並拋出:
線程“主”中的異常java.lang.NoClassDefFoundError:org / springframework / context / ApplicationContext導致原因:java.lang.ClassNotFoundException:org.springframework.context.ApplicationContext在java.net.URLClassLoader $ 1.run(URLClassLoader.java:202 ),位於java.net.URLClassLoader.findClass(URLClassLoader.java:190)的java.security.AccessController.doPrivileged(本機方法),位於sun.misc.Launcher $的java.lang.ClassLoader.loadClass(ClassLoader.java:306)位於java.lang.ClassLoader.loadClass(ClassLoader.java:247)的AppClassLoader.loadClass(Launcher.java:301)
將Spring jar文件添加到您的類路徑中。 對於主jar文件,您可以執行
java -cp /path/to/CleanOmicsTracer.jar:spring-full-1.0.1.jar com.clb.genomic.lyon.external.MainExternal
如果您有多個JAR文件,則可以使用類路徑通配符
java -cp /path/to/CleanOmicsTracer.jar:lib/* com.clb.genomic.lyon.external.MainExternal
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.