[问题更新:见下文]
我有一个引用另一个 Maven 项目(门户框架)的 Maven 网络项目(门户网站)。Web 服务器是 Wilfly 10.0.0,IDE 是 Eclipse MARS,带有用于连接器的 Jboss 工具。
框架项目在 src\main\resourcesMETA-INF\taglib.tld 上包含一个 TLD 文件。我在我的 JSP 上使用的:
<%@taglib uri="http://fhc.pt/tags/fmc" prefix="fmc"%>
<fmc:lookup attr1="this" attr2="that"></fmc:lookup>
问题是,在我的 JSP 上使用标记库会导致访问被拒绝错误:
Stack Trace
org.apache.jasper.JasperException: java.io.FileNotFoundException: C:\Program Files\Java\wildfly-10.0.0.Final\standalone\deployments\portal.web.war\WEB-INF\lib\portal.framework-0.0.1-SNAPSHOT.jar (Access Denied)
org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:151)
org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:412)
org.apache.jasper.compiler.Parser.parseDirective(Parser.java:475)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1456)
org.apache.jasper.compiler.Parser.parse(Parser.java:143)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:223)
org.apache.jasper.compiler.ParserController.parse(ParserController.java:102)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:200)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:354)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:334)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:321)
现在,在将主项目部署到 wildlfy 时,依赖的 JAR 会在以下位置展开:
wildfly-10.0.0.Final\standalone\deployments\portal.web.war\WEB-INF\lib\portal.framework-0.0.1-SNAPSHOT.jar <- **This is a folder.**
我注意到 JAR 项目似乎在 eclipse、connector 和 wildfly 之间的处理方式不同,如下所示:
我的项目中有大量依赖包(Spring、hibernate 等),但只有这两个显示为“J2EE 实用程序 JAR”。这与部署时爆炸的 JAR 有关吗?
我还尝试在 wildfly 连接器上启用“部署为压缩存档”选项,但它并没有真正起作用(部署后 spring 根本没有启动)。
在搜索了这个问题之后,我对可能导致此问题的原因感到非常困惑:它是日食吗?M2E?POM 的?野蝇?Eclipse 方面?我尝试了这些晦涩的部署选项属性的多种组合,尝试删除“实用程序方面”,甚至运行 maven eclipse:eclipse 但老实说,我完全迷失了,因为我不知道在哪里搜索问题。
我该如何排序?
这是我的POM。简化:
“父 POM” - 对于所有项目:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>pt.fhc.fmc</groupId>
<artifactId>core-dependencies</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<dependencies>
<!-- Usual dependencies for Spring, Logging, Mysql, etc... -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
门户框架 POM (JAR)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>portal.framework</artifactId>
<name>FMC Framework</name>
<parent>
<groupId>pt.fhc.fmc</groupId>
<artifactId>core-dependencies</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>..\fmc-dependencies\pom.xml</relativePath>
</parent>
</project>
Portal-WEB POM (The WAR) 注意:这个项目对不同的模块使用 maven 覆盖,但是因为模块被正确地添加到最终的 WAR 中,所以效果很好。只是 JAR 会爆炸
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>portal.web</artifactId>
<packaging>war</packaging>
<name>web Module</name>
<parent>
<groupId>pt.fhc.fmc</groupId>
<artifactId>core-dependencies</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>..\fmc-dependencies\pom.xml</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>pt.fhc.fmc</groupId>
<artifactId>portal.framework</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- Modules -->
<dependency>
<groupId>pt.fhc.fms.modules</groupId>
<artifactId>module-a</artifactId>
<type>war</type>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>pt.fhc.fms.modules</groupId>
<artifactId>module-b</artifactId>
<type>war</type>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>pt.fhc.fms.modules</groupId>
<artifactId>module-c</artifactId>
<type>war</type>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<overlays>
<overlay>
<groupId>pt.fhc.fms.modules</groupId>
<artifactId>module-a</artifactId>
</overlay>
<overlay>
<groupId>pt.fhc.fms.modules</groupId>
<artifactId>module-b</artifactId>
</overlay>
<overlay>
<groupId>pt.fhc.fms.modules</groupId>
<artifactId>module-c</artifactId>
</overlay>
</overlays>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
更新:我注意到使用 wildfly maven 插件并运行 mvn wildfly:deploy 一切正常(实用程序 JAR 被部署为存档),所以问题一定出在 eclipse 中,它正在爆炸实用程序 JAR。