Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JBoss类路径问题_Java_Jakarta Ee_Jboss_Classpath_Jboss7.x - Fatal编程技术网

Java JBoss类路径问题

Java JBoss类路径问题,java,jakarta-ee,jboss,classpath,jboss7.x,Java,Jakarta Ee,Jboss,Classpath,Jboss7.x,在/class下的java代码中,我有 str_url = "/jasperReports/report.jasper"; url = getClass().getResource(str_url); 而实际的report.jasper模板正在 Application.war\WEB-INF\classes\jasperReports 从war文件,但现在应用程序给了我以下异常: net.sf.jasperreports.engine.JRException: java.io.FileNot

在/class下的java代码中,我有

str_url = "/jasperReports/report.jasper";
url = getClass().getResource(str_url);
而实际的
report.jasper
模板正在

Application.war\WEB-INF\classes\jasperReports
从war文件,但现在应用程序给了我以下异常:

net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: 
C:\Windows\System32\content\Application.war\WEB-INF\classes\jasperReports\report.jasper
那么,到底发生了什么,为什么应用程序在
系统文件夹下查找模板,而该文件夹根本不是临时文件夹或缓存文件夹

更新 部署应用程序时,我确实会遇到异常:

15:29:43,359 WARN  [org.jboss.as.ee] (MSC service thread 1-1) JBAS011006: Not installing optional component examples.ShowSource due to exception: java.lang.ClassNotFoundException: examples.ShowSource from [Module "deployment.Application.war:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:423)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)
at java.lang.Class.forName0(Native Method) [rt.jar:1.6.0_35]
at java.lang.Class.forName(Class.java:247) [rt.jar:1.6.0_35]
at org.jboss.as.server.deployment.reflect.DeploymentClassIndex.classIndex(DeploymentClassIndex.java:54)
at org.jboss.as.ee.component.deployers.EEModuleConfigurationProcessor.deploy(EEModuleConfigurationProcessor.java:81) [jboss-as-ee-7.1.2.Final-redhat-1.jar:7.1.2.Final-redhat-1]
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:116)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_35]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_35]
at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_35]

@Dreamer不认为JBossAS直接从war文件读取类和其他内容。事实上,jboss在运行时使用temp,并将war文件内容放入(或转换)到。\standalone\tmp\vfs\temp.“

例如,如果war文件位于以下路径中:

D:\wildfly-9.0.1.Final\standalone\deployments\myApp.war
在运行时,我们有如下内容:

D:\wildfly-9.0.1.Final\standalone\tmp\vfs\temp\temp4b7f8b311765d81a\content-5bbc912a62a7929e
String projectUrl = Test.class.getProtectionDomain().getCodeSource().getLocation().toString();
 ClassLoader loader = TestClass.class.getClassLoader();
 InputStream reportStream = loader.getResourceAsStream(myFilePath);//and load it
(最后一条路径在任何运行后都会发生明显变化)

现在假设我们有一个名为“Test.java”的类,我们希望通过如下方式获得它的真实路径:

D:\wildfly-9.0.1.Final\standalone\tmp\vfs\temp\temp4b7f8b311765d81a\content-5bbc912a62a7929e
String projectUrl = Test.class.getProtectionDomain().getCodeSource().getLocation().toString();
 ClassLoader loader = TestClass.class.getClassLoader();
 InputStream reportStream = loader.getResourceAsStream(myFilePath);//and load it
项目URL为:

   vfs:/D:/wildfly-9.0.1.Final/bin/content/myApp.war/WEB-INF/classes
我认为这条路不是你想要的实际的东西!了解war文件在运行时更改的实际路径非常重要:)

我也有同样的问题。我有一个使用JSF的应用程序,我想加载一个jrxml文件。我通过以下方式解决了这个问题:

String this.projectUrl = FacesContext.getCurrentInstance().getExternalContext().getRealPath("one file");//to get my current app path in temp!

并按如下方式加载我的文件:

D:\wildfly-9.0.1.Final\standalone\tmp\vfs\temp\temp4b7f8b311765d81a\content-5bbc912a62a7929e
String projectUrl = Test.class.getProtectionDomain().getCodeSource().getLocation().toString();
 ClassLoader loader = TestClass.class.getClassLoader();
 InputStream reportStream = loader.getResourceAsStream(myFilePath);//and load it

我希望这能帮助你

试试“/jasperReports/report.jasper”;在单机版中删除临时、日志和数据文件后,尝试重新部署项目folder@user谢谢。添加点,但仍然不起作用。@Ruchira谢谢。我尝试过,删除tmp下的项目文件夹并重新部署…不工作..@dreamer当您部署war文件时,是否出现任何错误