【问题标题】:The best way to distribute this framework分发此框架的最佳方式
【发布时间】:2011-06-18 23:48:27
【问题描述】:

我刚刚创建了一个框架(将其描述为集成会更准确),我想知道分发它的最佳方式是什么。该项目是 mavenized 并使用 Spring 3,但我在这两个领域都是新手,我不确定分发它的最佳方式是什么。

该框架涉及我创建的 Javascript 库、Spring 3(Web MVC 部分)和 Hibernate Validator 之间的集成。

  • 我有整个项目的pom.xml
  • 我有一个 src/main/java(已正确命名空间),其中包含与集成相关的类。
  • 我有一个 webapp 目录和一个 js 文件夹,其中包含此集成所需的 Javascript 文件。
  • 我有一个 WEB-INF/tlds 目录,其中包含一个用 Java 实现的自定义标记的 tld。
  • 我有一个用于自定义标签的 WEBINF/tags 目录。
  • 我在src/main/resources 中有一个applicationContext.xml
  • 我在WEB-INF 中有一个springmvc-servlet.xml
  • 我在WEB-INF 中有一个web.xml(看起来是标准的,开箱即用;我不记得做过任何更改)。
  • 我有一个 src/test/java/,其中包含集成框架的测试

我应该包含/排除哪些文件/目录,以及什么是分发此集成的好方法(对于 Spring 3)?有标准吗?

更新

抱歉,我没有弄清楚“分发”的含义 :) 我的意思是其他开发人员可以将此框架作为工件包含在他们的项目中(可能作为 jar),类似于库的分发方式.我只是对那里有特定于 webapp 的东西这一事实感到困惑。

【问题讨论】:

  • 您是否能够部署和运行您的 Web 应用程序?我认为您当前的集成没有任何问题。唯一的小事是将所有 spring 配置文件分组到 WEB-INF 的子文件夹中,但这需要您在 web.xml 中正确配置 DispatcherServlet。我通常在 WEB-INF\config 文件夹中有 applicationContext.xml。但是,当然,你可以在任何地方使用它,因为 Spring 支持类路径查找。
  • 听起来很好地使用了 Maven 原型。

标签: java spring-mvc distribution software-distribution hibernate-validator


【解决方案1】:

使用Maven WAR overlays 也在this question 中描述。

还可以创建一个示例 - 可能来自您已经拥有的 webapp - 所有这些并从中生成一个Maven archetype

【讨论】:

  • 所以当你说 tld 的时候,这将包括标签文件以及 javascript 文件?
  • 标记文件是,JavaScripts 没有。您的项目结构应该更改,以便所有非 java 源文件都位于适当的子目录中的 src/main/resources。例如,spring-webmvc 将 TLD 作为 JAR 的一部分分发,check out their project structure。 JavaScript 应该单独分发,因为没有好的方法(据我所知)将它们从 JAR 正确包含到项目中。
  • 当我发现 WAR 覆盖时,我升级了我的答案。这些可以用于分发这种框架。
【解决方案2】:

将 maven webapp 项目制作成框架对其他人来说使用起来会有些麻烦。问题不在于您应该包含/排除什么,而是下游 webapp 项目应该包含/排除什么。下游项目需要从其战争依赖项中排除web.xml,并需要确保它不包含与其依赖的战争文件冲突的文件/文件夹名称。

通常web.xml 会被maven-war-plugin 排除在外,但默认情况下不会排除像记录器配置这样的配置文件,它会与下游项目一起崩溃。由于排除了web.xml,下游项目将无法知道其战争依赖项中的servlet定义是什么。您需要自己相应地复制或定义它们。

由于您没有对 web.xml 进行任何更改,我认为您不会将其作为 webapp 运行。你应该把它做成jar包,而不是war包,并将其转换为普通的maven jar项目,即删除src/main/webapp文件夹

虽然可能有战争依赖​​,但我强烈建议不要这样做。

更新

从你的评论来看,这也是我担心的。这可能是您必须使用 war 包的唯一原因。所以你需要记住:

  1. 如果您在 src/main/webapp 下有 spring 调度程序配置 xml 和 bean 定义,请确保使用 maven-war-plugin 的配置设置在您的下游项目中正确包含/排除它们。确保文件名不会与下游项目崩溃。当您想要重用 bean 定义时,您需要小心,因为它可能未配置为适合下游项目的需要。在许多情况下,您最终会编写一个新定义。 提示:将它们作为资源放在类路径中唯一的包名下是最安全和最简单的方法。

  2. web.xml 必须在那里才能制作一个战争包,但它将被maven-war-plugin 从下游战争项目中排除。您需要将此插件包含在您的下游项目中。如果您在 web.xml 中有任何 servlet 定义,它将会在下游项目 web.xml 中重新定义。

  3. 注意src/main/webapp 文件夹下的文件夹/文件冲突。

总而言之,主要关注的是您放置 xml 配置的位置以及您希望如何在下游项目中包含/排除它(而不是在您的集成中)。

【讨论】:

  • 不幸的是,src/main/webapp 包含项目所需的 tld 和标记文件。我将如何分发这些?
  • @Vivin Paliath 我已经更新了答案,希望对您有所帮助。
【解决方案3】:

取决于您在这里所说的“分发”是什么意思。 :)

如果您只是分发给其他开发人员以便他们可以在同一个项目上工作,也许您想调用mvn clean 来删除目标文件夹、编译的类等。这个命令将负责包含和排除文件/目录。您需要做的就是压缩整个项目并“分发”它。当开发人员将此项目导入工作区时,他们会通过您的 pom.xml 获取所有 jar。在我看来,Pom.xml 是所有 Maven 项目中最重要的部分。

如果您希望最终用户能够运行您的项目而不是更改您的代码,您可能需要调用mvn package 来创建war 文件。这样,您的用户就可以将此 war 文件放入应用程序服务器并运行它。

【讨论】:

    猜你喜欢
    • 2015-05-18
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 2014-01-22
    • 2010-11-26
    • 2012-02-24
    • 2018-08-30
    • 2011-08-23
    相关资源
    最近更新 更多