代码之家  ›  专栏  ›  技术社区  ›  kosoant

当战争规模为41m时,如何避免在战争中复制40M的Java LIB?

  •  6
  • kosoant  · 技术社区  · 16 年前

    目前,我的构建过程包括在WEB-INF/LIB下用所有需要的Java库重新包装WAR文件,然后将WAR文件复制到开发/演示/生产服务器上,以便由Tomcat重新部署。

    打包的WAR文件的大小大约是41M,目前它有大约40M的外部Java库。必须有更好的方法。你是怎么解决这个问题的?

    我的开发机器是一个WindowsBox,其中Eclipse作为我的IDE,Ant作为我的构建工具。这些服务器都是带有Tomcat5.5的Linux设备。

    我应该把jar文件添加到服务器端的war包中吗?

    9 回复  |  直到 16 年前
        1
  •  17
  •   digitaljoel    16 年前

    我知道你在说什么,对我们的一些网络应用程序也有同样的失望,但是为了一致性,我建议你保持原样。如果将库复制到tomcat/lib目录,可能会遇到系统类路径与webapp类路径的问题。

    通过保持原样,您可以确保在开发/演示中部署的内容与在生产中部署的内容相同。当你在生产中手动调整东西的时候,生活很糟糕,或者你有一些疯狂的错误,因为你忘记了在生产中更新xyz.jar版本1.6到1.6.1,现在它的行为与你认为在演示中完全相同的代码不同。

    当使用足够重要的东西来开发/演示/生产系统时,我认为一致性比.war文件大小更重要。

        2
  •  5
  •   skaffman    16 年前

    为此,我们使用rsync工具(在本例中,在Windows下使用cygwin)将部署复制到运行Linux的服务器上。我们使用分解的war/ear文件(即名为myapp.war的目录结构,而不是名为myapp.war的zip文件),rsync将只传输已更改的文件。

    一般情况下,rsync会在5秒内传送30-40兆字节的爆炸耳朵。

        3
  •  1
  •   McDowell rahul gupta    16 年前

    Tomcat有一个 shared/lib 目录,这是全局应用程序依赖项的适当位置。但是,这些对所有应用程序都是可见的,这将影响依赖关系管理,并可能对静态变量等事情产生影响。我不确定您是否可以在Tomcat中配置更好的配置。

    另一种选择是切换到更复杂的Web容器。例如,WebSphere Application Server 社区版 (蓝色水洗版 Geronimo 支持 per-asset libraries . 其他免费和商业服务器也支持这一点。我知道 WebSphere Application Server 是的,我很确定你能在 Glassfish .

        4
  •  1
  •   John Doe    16 年前

    @麦克道尔,当提到这些J2EE服务器时,您应该精确地指出它们是J2EE服务器(servlet容器+其余)。

    像@digitaljoel,我建议保持原样。看起来您还没有进行太多的Web应用程序部署。您将遇到的问题不值得付出代价(版本冲突、部署错误等)。

        5
  •  0
  •   JeeBee    16 年前

    你能把不改变的jar添加到服务器端的Java库路径中,并且只包括在你的战争中经常变化的瓶子吗?

        6
  •  0
  •   Mike Pone    16 年前

    可以在Tomcat/LIB目录中包括外部Java库。这样他们就可以留在服务器上。

        7
  •  0
  •   kgrad    16 年前

    您可以将其部署为JAR文件,在本地复制部署环境,并只复制已更改的文件和JAR本身。唯一真正的问题是路径。

    或者你也可以试着竖起耳朵。

        8
  •  0
  •   imi    16 年前

    我在开发服务器中使用“分解的Web应用程序”,偶尔也在生产环境中使用。部署过程(基于Ant)使用我们的包更新WEB-INF/LIB中的JAR。只有在开发服务器中,我们才激活Tomcat重载,它负责在发生变化时重新启动应用程序。您应该为这些Tomcat分配一些额外的永久内存,并有一种重新启动服务器的方法,因为重新加载可能会使Tomcat不时崩溃。

    我知道这是一个奇怪的配置,但我不明白不断地重新打包我们典型应用程序的30MB(和不断增长)能做得更好。可能有一天,开发描述符允许外部引用容器可以下载和缓存的库。???

    对不起,我的英语不好。

        9
  •  0
  •   chris    16 年前

    您需要的是一个版本控制工具和一个构建过程。

    使用csv、svn、git或任何适合您的工具来控制源代码。 使用一个构建工具来构建应用程序:maven,ant,…

    现在,当您想在服务器上部署应用程序时,您只需在计算机上提交更新,在服务器上更新源,构建应用程序并从服务器部署它。

    这样,服务器只需加载您的修改,而且速度应该快得多。