2012-07-22 29 views
0

我们将为我们的客户开发一个以Java EE技术编码的巨大webapp。我的客户端不支持在他们的服务器中使用OSS的ANT和Eclipse。因此我们的要求是在我们的本地系统中编写和开发应用程序并对其进行测试,然后我们需要在客户端服务器中提供源代码,在那里我们将运行一个部署脚本,它将编译所需的java文件源文件并将.class文件和其他资源文件部署到在该服务器上运行的Tomcat(HP-UX)。打包并部署没有ANT的Java EE webapp

是否可以使用JAVA_HOME/bin中提供的javac,jar或其他命令来使用ANT脚本部署应用程序?如果有任何这样的实施可以请指导我们?我很想知道在ANT开发之前,JAVA开发人员是如何用来部署大型应用程序的。我开始知道MAKE命令(在我们的服务器上可用)不适合Java应用程序。

注意:我们将有复杂的包层次(多达4个级别)

UPDATE:它看起来像我没有一个简单的答案。我想说服我们的客户使用ANT。如果没有,我会根据下面的评论为我的客户开发一个跨平台的定制构建工具......感谢家伙..我不认为构建这种类型的工具并不难,如果我们知道包装和部署的正确步骤。 ..

+0

为什么你需要在客户端服务器建立呢?提交战争或耳朵文件会不会更自然? – 2012-07-22 17:29:27

+0

是的,我们可以做到这一点。但客户端只需要源文件。比方说,我们提供源文件和.war文件。但在未来,如果他们想自己,他们不能维护应用程序,因为他们不能够像OSS ANT,ECLIPSE安装在他们的开发系统.... – Venkatesh 2012-07-22 17:34:17

+1

所以Tomcat是不是OSS呢? – Codo 2012-07-22 17:41:30

回答

1

我觉得整个设置是非常奇怪的,但是无论如何...

.war文件是非常简单的。这是一个具有给定目录结构的ZIP文件。您可以使用首先运行javac来编译源代码的shell脚本轻松创建该脚本,然后将该文件复制到正确的目录,并最终将其打包到带有.war扩展名的ZIP文件中。

你会在网上找到.war文件的规范。或者你可以在你的环境中创建一个,使用ZIP工具打开它并查看哪些文件需要去哪里。

更新:如果你的应用程序很大,那么你可以将它分解成模块。每个模块将被编译并打包成一个单独的.jar文件(基本上也是一个ZIP文件)。如果一个模块依赖于另一个,那么只需将所需的.jar文件作为类路径参数传递给编译器即可。

+0

感谢您的回答。我一直在为小型应用程序做同样的事情,我独立使用每个包的javac命令,然后使用jar命令将其打包。但是我们的代码被放入更多的包中......而且JAVA文件依赖于其他包中的其他java文件(超级类)。所以在这种情况下,一个javac命令不会从src /文件夹编译整个源代码。此外,随着时间的推移,可以包括一个新的软件包......(必须是可扩展的)。 – Venkatesh 2012-07-22 17:56:46

+0

@Venkatesh:你也可以使用.jar文件。看到我上面的更新。 – Codo 2012-07-22 18:00:54

+0

感谢您的更新。但是这是一种情况。 PACKAGE1中的JAVA1文件是PACKAGE2中JAVA2文件的子类。 PACKAGE2中的JAVA3文件是PACKAGE1中JAVA4文件的子类。在那种情况下,哪个包必须先被编译? – Venkatesh 2012-07-22 18:06:50

0

如果你真的必须接受客户的要求,那么这可能是我该怎么做的。

为了避免必须修改每个添加的文件的依赖关系,我将介绍将源代码,jar文件和输出文件放在哪里的约定。然后,我将创建一个脚本,其中包含几个设置:

  1. 战争名称。
  2. 库位置列表。
  3. 源根目录,也许让根目录的文件夹名称为jar文件名称。

然后当运行脚本时,它会创建一个类路径,包括库位置列表中显示的所有jar文件。然后,它将为每个源位置编译java文件,构建一个jar并将jar文件添加到类路径(以防后面的模块需要它)。

最后,将建立一个web应用程序结构与外部库,新创建的罐子,复制在ASP文件(可能是预编译),然后使用压缩包的Web应用程序结构成war文件。

了解,所以你不使用任何外壳的特定功能,其外壳是由客户接受。我不认为你需要什么幻想,所以不应该太难。

+0

谢谢罗杰。我想根据上述指导方针为客户实施定制构建工具。我们仍然说服我们的客户使用ANT。 – Venkatesh 2012-07-23 21:16:56