分发此框架的最佳方式

时间:2011-02-01 01:57:44

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

我刚刚创建了一个框架(将其描述为集成会更准确),我想知道分发它的最佳方式是什么。该项目是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目录。
  • applicationContext.xml中有src/main/resources
  • springmvc-servlet.xml中有WEB-INF
  • web.xml中有一个WEB-INF(看起来是标准的,开箱即用;我不记得做出任何改动)。
  • 我有一个src/test/java/,其中包含对集成框架的测试

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

更新

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

3 个答案:

答案 0 :(得分:1)

取决于您在此处“分发”的含义。 :)

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

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

答案 1 :(得分:1)

将maven webapp项目纳入框架对于其他人来说将是一件麻烦事。问题不在于您应该包含/排除的内容,而是下游webapp项目应包含/排除的内容。下游项目需要从其战争依赖项中排除web.xml,并且需要确保它不包含与其依赖的war文件冲突的文件/文件夹名称。

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

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

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

<强>更新

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

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

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

  3. src/main/webapp文件夹下发生文件夹/文件冲突。

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

答案 2 :(得分:1)

使用Maven WAR overlays中描述的this question

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