【问题标题】:How can I speed up Maven and Netbeans如何加快 Maven 和 Netbeans
【发布时间】:2011-11-20 05:41:36
【问题描述】:

我有一个相当大的项目(包含相当大的堆栈,包括 Spring 和 Hibernate),我使用 Maven 通过 Netbeans 构建。

不幸的是,每次我对课程进行更改时,我都需要重新构建。这意味着

  • 全部保存并编译
  • 运行所有测试
  • 打造大规模战争
  • 从 Tomcat 取消部署
  • 从 Tomcat 重新部署
  • 启动应用程序(Spring = Zzzzzzz / Hibernate = Zzzzzzz)

这最多可能需要 5 分钟来检查是否有细微的变化。也许我有错误的方法?

请指教...

【问题讨论】:

  • Spring 和 Hibernate 花费了这么长时间并且记录了这么多,这也让我发疯了。当然必须有一个 Spring lite(仅使用托管 bean)和 hibernate lite(实际上只是使用简单的注释实体)。这些 Java 框架可以是非常棒的。
  • 我看到使用一些硬件功能(固态磁盘)和操作系统调整可以增加构建过程。你可以看起来像这样。
  • @Alex K,良好的旧 Java 性能方法...添加 8 个内核、12GB RAM、一个固态磁盘。感谢您的提示,但我宁愿尝试正确配置这些东西;)

标签: hibernate spring tomcat netbeans maven


【解决方案1】:

试试 JRebel。 http://www.zeroturnaround.com/jrebel/

顺便说一句,我不是 zt 支付的 - 只是一个满意的用户。

【讨论】:

    【解决方案2】:

    好的,我也在进行非常相似的设置,所以这是我的 2 美分。

    首先,使用 Maven-Jetty 插件让您的脚湿透。让它扫描文件以进行更改,这样您就不必为每次更改重新构建/部署整个项目。还可以将其配置为存储会话,以便在每次(自动)部署时,您不必重新登录并进入进行更改之前的状态:

        <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
            <version>6.1.24</version> 
            <configuration>
                <stopPort>9669</stopPort>
                <stopKey>myapp</stopKey>
                <!-- Redeploy every x seconds if changes are detected, 0 for no automatic redeployment -->
                <scanIntervalSeconds>3</scanIntervalSeconds>
                <connectors>
                    <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                        <port>8080</port>
                        <maxIdleTime>60000</maxIdleTime>
                    </connector>
                </connectors>
                <webAppConfig>
                    <contextPath>/myapp</contextPath>
                    <sessionHandler implementation="org.mortbay.jetty.servlet.SessionHandler">
                        <sessionManager implementation="org.mortbay.jetty.servlet.HashSessionManager">
                            <storeDirectory>${project.build.directory}/sessions</storeDirectory>
                        </sessionManager>
                    </sessionHandler>
                </webAppConfig>
            </configuration>
        </plugin>
    

    现在,转到项目 Properties(通过右键单击项目)> Build > Compile > Compile on save 并选择 For both application and text execution

    还可以转到Options > Miscellaneous > Maven > 并检查/选择Skip Tests for any build executions not directly related to testing,以便仅在您实际运行“测试”时运行测试。

    按照这些简单的步骤,我可以快速地实时编码和测试更改,而无需重新部署。也就是说,我遇到了一些小问题/烦恼:

    1. 当某些东西不起作用时(例如,您删除了某些东西并且更改没有反映),您仍然需要清理构建

    2. 长时间保持运行会出现 PermGen 异常(Out of space),这是合理的,您始终可以使用 jvm opts 增加内存

    3. 一旦习惯了这种设置,你就会讨厌在 jboss/websphere 等容器上开发/测试项目

    【讨论】:

    • 非常感谢这篇文章。我会尝试这一切。这适用于 Tomcat,还是 Jetty 插件只能与 Jetty 一起使用?也许 Jetty 并没有什么问题。我敢肯定它的重量很轻。我对使用 JBoss 或 Websphere 没有兴趣。
    • 一开始我也想用tomcat代替jetty,但现在我爱上了mvn-jetty。我从来没有使用过 jetty 作为服务器来部署战争,但插件就像魔法一样工作。我认为tomcat也有一个插件(但maven-jetty无法运行tomcat)。
    • 哇,现在你真的让我在思考。我的意思是,我对 Tomcat 的忠诚度很高,并且我“喜欢”使用本地和实时服务器的想法。请告诉我更多关于您使用 Jetty 的经验。对了,maven插件是自带Jetty插件的吗?
    • 其实没关系。我现在也要使用 Jetty。好像还没有可靠的 Tomcat 解决方案……
    • 当我的应用程序最终要部署在 tomcat 上时,我的想法与您在 tomcat 上开发/测试的想法完全一样。但是,除非您使用某些 tomcat 特定的功能/api,否则在开发时进行测试几乎没有任何区别。此外,Netbeans 本身也支持 tomcat 热部署(虽然比码头重启慢)
    【解决方案3】:

    为什么每次更改都需要运行测试?在进行微不足道的更改时,这是一个巨大的成本。使用 -DskipTests=true 将其关闭

    看看:http://wiki.netbeans.org/HotDeploymentWebApplicationWithMaven

    另外,将 Netbeans 设置为在 Tomcat 上热部署(使用 Jetty)。看到这个帖子:Incremental hot deployment on Tomcat with Maven and NetBeans

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      • 1970-01-01
      • 2019-07-06
      相关资源
      最近更新 更多