【问题标题】:Maven + Netbeans Debugging WAR ApplicationMaven + Netbeans 调试 WAR 应用程序
【发布时间】:2012-06-28 15:47:19
【问题描述】:

我们有 2 个 Maven 应用程序,一个包含我们的 jsps 和表示层代码的 war 应用程序,以及一个包含我们的业务层代码的共享库。

在迁移到 maven 之前,我们将共享库作为 WAR 应用程序的项目引用。每当我们在 Netbeans 中构建或调试 WAR 应用程序时,共享库都会自动编译和构建,并且会自动获取任何新的更改。

使用 Maven,看起来每当我们对共享库进行更改时,我们现在都需要在调试之前构建共享库项目。有什么办法可以保留旧方法的效率吗?

当我们调试 WAR 应用程序时,有什么方法可以让 Maven 在我们调试时自动构建共享库依赖项(本地 jar 项目)?

【问题讨论】:

    标签: java maven netbeans


    【解决方案1】:

    在 Eclipse 中,它只是自动构建/hot deploy 设置正确的问题。只需确保安装了 maven 插件并将其用作项目的构建器即可。

    我认为 netbeans 并没有太大的不同。

    【讨论】:

    • 对 jsps 的更改可以顺利进行。我需要 Netbeans 做的是在触发 WAR 应用程序的构建时触发共享库的构建。
    • 为什么?它没有改变,为什么要打扰?如果它已更改但未更新,则您的构建路径不正确。
    • 例如,如果我将共享库中的方法签名从 getWidget() 更改为 getWidgetOne(),除非我构建共享库,否则 WAR 文件中的 jsp 不会拾取它,然后调试 WAR项目。我需要war项目在构建时自动打包共享库的jar。
    • 在eclipse中,你只需将依赖项目添加到war项目的构建路径中。并删除自动构建路径中对代码(即编译的jar文件)的任何其他引用。这是 ide 特定的,与 maven 无关
    • 每当您对源文件进行更改时,eclipse 是否会自动构建 jar?如果没有,新的 jar 是如何生成的?
    【解决方案2】:

    好的,我终于使用 maven 调用程序插件完成了这个:

    <plugin>
    <artifactId>maven-invoker-plugin</artifactId>
    <version>1.6</version>
    <configuration>
        <projectsDirectory>../</projectsDirectory>
        <pomIncludes>
            <pomInclude>project1/pom.xml</pomInclude>
            <pomInclude>project2/pom.xml</pomInclude>
        </pomIncludes>
        <goals>
            <goal>install</goal>
        </goals>
    </configuration>
    <executions>
        <execution>
            <id>build-deps</id>
            <goals>
                <goal>install</goal>
            </goals>
        </execution>
    </executions>
    

    我非常怀疑这是最佳做法,但它完成了工作。您可以将它安装到它自己的配置文件中,以确保它不会干扰自动构建。

    【讨论】:

      【解决方案3】:

      我解决这个问题的方法是拥有一个封装所有子组件的父 POM:

      myProject
       +- myProject-web
       +- myProject-bl
       +- myProject-da
       \- myProject-domain
      

      每个项目都是一个独立的项目,构建到它自己的 maven 依赖项中。然后,父 POM 只包含其他项目:

      <modules>
        <module>myProject-web</module>
        <module>myProject-bl</module>
        <module>myProject-da</module>
        <module>myProject-domain</module>
      </modules>
      

      现在,每当您构建 myProject 时,如果子组件已过期,maven 将重新构建它们。由于 maven 单独构建每个子组件,因此您将在 Maven 存储库中拥有每个部分,任何其他需要使用您项目的一个或多个部分的项目都可以访问。

      【讨论】:

      • 是的,这绝对是正确的做法。但这为 Netbeans 的开发过程增加了另一个项目和另一个构建。例如,如果我对 myProject-da 进行了小改动,那么我必须构建 myProject,然后调试 myProject-web(Netbeans 也会构建它)。我知道额外的步骤没什么大不了的,但是当进行许多小的更改时,它就会加起来。
      • 这不是你现在正在做的吗?您构建您的业务逻辑(因为它已更改),然后调试您的 JSP 包。对我来说,这似乎是相同数量的步骤......我错过了什么吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-10
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多