在jBoss AS 7中展开WAR或EAR文件

3
我将一个Web服务项目部署到jBoss AS7中,除了 jBoss 不扩展我的 WAR 或 EAR 文件外,一切都很顺利。我已经尝试将文件复制到“jboss-as-7.1.0.Final \standalone\deployments”文件夹并使用 WebConsole,但在两种情况下的结果都是相同的。如果我从 Eclipse 中部署,一切都运行良好。我需要它来展开我的文件,因为在应用程序初始化中,我会扫描类目录以查找正确的类,然后使用反射进行实例化。编辑:不知道这是否是 jBoss AS 7或 jBoss AS 家族的特殊情况,因为我已经使用过 WebSphere 和 jBoss Web,它们都扩展了文件。编辑2:添加了一个带有执行路径的 System.out。
MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath();

它会返回以下路径。
C:\jboss-as-7.1.0.Final\bin\content\ServerEAR.ear\Server.war\WEB-INF\classes

这个单词拼写错误。所以我搜索了类名,并在以下找到它:

C:\jboss-as-7.1.0.Final\standalone\tmp\vfs\deployment5a9e98d5c43716c3\Server.war-e31a657d2bc3bd0f\WEB-INF\classes\r30

是否有办法强制JBoss将文件提取到部署文件夹中?或者我如何在运行时获取以前的路径。


部署為 exploded 形式是一個選項嗎? - souser
你所说的“exploded form”是指手动解压WAR文件并将其放置在部署文件夹中吗?如果是,那不行,这不是一个选项 :( - Gonçalo Cardoso
3个回答

6

我忘记了这个问题,以下是我解决它的方法:

public String getRealFilePath(String aFilePath) throws Exception
{
    org.jboss.vfs.VirtualFile vFile = org.jboss.vfs.VFS.getChild(aFilePath);
    URI fileNameDecodedTmp = org.jboss.vfs.VFSUtils.getPhysicalURI(vFile);

    path = fileNameDecodedTmp.getPath();
    System.out.println(path);
    return path;
}

所以在运行时,我只需要使用原始问题值调用getRealFilePath(),问题就解决了;)

我对 JBoss 使用的虚拟文件系统一无所知。我只是注意到使用 Thread.currentThread().getContextClassLoader().getResource() 加载文件会导致目录位于 JBOSS_HOME/bin/content,而不是预期的 JBOSS_HOME/standalone/deployments/<myWarFile.war>。 然而,这似乎有效。非常感谢您分享这个!我只是有点担心在使用 vfs 包中的类时捕获到的 JBoss 依赖性。 - Jens

2
请检查您的类路径设置。最近我也遇到了同样的问题,并通过添加系统环境变量来解决它:
CLASSPATH=.;
C:\Program Files\Java\jdk1.6.0_10\lib;
C:\Program Files\Java\jdk1.6.0_10\lib\tools.jar;
C:\Program Files\Java\jdk1.6.0_10\lib\dt.jar; `

2
我相信你不能强制Jboss7在部署时自动展开war文件。
不过,你可以复制已经展开的war文件,这样就不会有任何问题了。
实际上,如果你仔细观察Eclipse的部署,你会注意到它将整个目录复制到部署目录,而不是war文件本身。
顺便问一下,你为什么需要展开部署呢?如果你需要访问和读取一些文件作为资源,你可以看看classpath resources

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接