如何创建(部署)多项目?

时间:2017-01-17 17:59:47

标签: maven tomcat java-ee wildfly web-deployment-project

我有三个池(应用程序),它们按顺序转换数据并通过套接字相互通信(或获取,发布 - 永不清楚)。我有servlet,它接受数据并将数据传输到其中一个起始池。如何在一个容器(tomcat,wildfly)中运行它?制作3罐,1件战争神器或别的东西? 应该写在pom.xml中吗?

1 个答案:

答案 0 :(得分:0)

嗯,模块之间的通信非常重要:

  • 如果您对通过直接本地 API调用进行通信感到满意,则必须构建一个包含三个模块的单一战争(通常每个模块一个JAR)。

  • 但是如果你想要一个分布式应用程序,通信应该是远程(通过TCP套接字,RMI,HTTP,ReST等)。通过这种方式,您可以为每个模块构建一个程序集:如果模块包含servlets / JSP,则应为WAR;如果不包含,则应为JAR。

在Maven中,这意味着:

  1. 创建父项目,其中包含所有模块,每个模块都有packaging=pom和一个<module>声明。
  2. 然后,使用package=jarwar(取决于上述决定)为每个模块创建一个模块项目(在父模块内)。
  3. 设置它们之间的正确依赖关系,以防您需要公开其公共API作为相互通信的方式。
  4. 根据类型部署和启动每个模块也很重要(由@Carlitos Way评论):

    • WAR必须部署到servlet容器(例如Tomcat)。
    • 可以使用shell脚本从命令行启动JAR。

    启动侦听端口的应用程序

    每个非Web模块都应该有一个主类,它将负责从命令行接收所需的参数(至少是端口号)并启动监听类 - 不管它是什么。

    package module.cmd;
    
    public class MyMainClass
    {
        public static void main(String[] arguments)
        {
            int port=Integer.parseInt(argument[0]);
            new MyListener(port).start();
        }
    }
    

    要运行它,执行就足够了:

    mvn exec:java -Dexec.mainClass="module.cmd.MyMainClass" -Dexec.args="8001"