从Maven项目中的Alfresco中删除远程跟踪图像

时间:2013-06-04 22:24:06

标签: java maven alfresco alfresco-share maven-war-plugin

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>

1 个答案:

答案 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 fileAlfresco Maven SDK为此提供全面支持,您只需要将其声明为父级 - 请参阅Google Docs parent POM以获取示例。