Alfresco 3.2c有一个跟踪图像,它使用我需要为项目删除的Javascript注入页面页脚。实际上,javascript在类alfresco-share-src.zip
的{{1}}中的SDK中进行了硬编码。
我们目前正在使用Maven项目构建Alfresco,它从maven插件和存储库中提取大部分Alfresco和Share,为我们提供了干净的根构建添加。但是由于此类是硬编码的,我们不希望触摸原始的jar / zip,我想我可以将文件的新副本添加到org/alfresco/web/scripts/MessagesWebScript.java
,将其编译到war文件的WEB-INF中,从而覆盖从jar中加载的内容(是的,我知道这样做的一种坏方法。)
但是,如果我只是添加文件,我会在行
上收到错误share/src/main/java/org/alfresco/web/scripts/MessagesWebScript.java
/share/src/main/java/org/alfresco/web/scripts/MessagesWebScript.java:[48,80] error: cannot find symbol
这让我相信它并没有引入用于构建war文件的相同依赖项(即spring-surf-parent依赖项)。如果我尝试将该依赖项添加到share.pom文件(如下所示),maven会成功构建,但依赖项会以某种方式提取servlet API jar文件,将它们添加到war中然后我得到预期的public class MessagesWebScript extends org.springframework.extensions.webscripts.MessagesWebScript
错误。
The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory
我的share.pom如下所示:
<dependency>
<groupId>org.springframework.extensions.surf</groupId>
<artifactId>spring-surf-parent</artifactId>
<version>1.2.0-M3</version>
</dependency>
答案 0 :(得分:1)
如果我理解正确,你想要覆盖一个Java类,在这种情况下,碰巧实现了一个Web脚本,但你用这个类的分叉副本重新打包共享WAR的解决方案是行不通的。
重新定义核心Alfresco(或在这种情况下分享)类是一个坏主意。此Web脚本在webapp类路径中的Spring配置文件alfresco/slingshot-application-context.xml
中声明,因此您应该在*-context.xml
下的alfresco/web-extension
文件中覆盖它,例如
<?xml version='1.0' encoding='UTF-8'?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- I18N resources and messages Web Script -->
<bean id="webscript.org.springframework.extensions.messages.get"
parent="webscript"
class="my.custom.namespace.MessagesWebScript">
<property name="webFrameworkConfigElement" ref="webframework.config.element"/>
<property name="dependencyHandler" ref="dependency.handler"/>
</bean>
</beans>
没有理由不从一开始就通过Spring实现覆盖。 Spring bean是为此目的而设计的,它可以增加很少的工作量,同时如果它不能按预期工作,你可以更有效地进行调试。
显然,您还需要确保自定义类my.custom.namespace.MessagesWebScript
作为构建的一部分进行编译,并且听起来它目前没有这样做。这可能是因为您在POM中缺少一些JAR(而非WAR)依赖项 - 请查看我们使用的集合的Google Docs integration Share POM。
最后,我建议您将自定义包装为AMP file。 Alfresco Maven SDK为此提供全面支持,您只需要将其声明为父级 - 请参阅Google Docs parent POM以获取示例。