【问题标题】:Maven: Deploy on Save of EAR in Netbeans only works when dependency project is openMaven:在 Netbeans 中保存 EAR 时部署仅在依赖项目打开时才有效
【发布时间】:2013-04-19 14:09:59
【问题描述】:

我的 EAR 项目的保存时部署选项不起作用,我不明白为什么。这是我的结构:

myproject-ear, packaging: EAR
--->myproject-core, packaging: JAR (ejbs)
--->myproject-web, packaging: WAR (.xhtml pages, some javascript and CSS)

我正在使用 maven,并且我将战争引用 JAR 作为提供的依赖项。

问题是我有一个 Nexus 存储库来处理我的 JAR 版本控制,我不会在我的 JAR 项目打开的情况下进行开发。但是,如果我关闭我的 JAR 项目然后部署应用程序,那么快速部署只会停止在 glassfish 上工作(它甚至不会在我的 EAR 目标文件夹上生成 gfdeploy,而是将所有文件复制到 glassfish 目录)。

这是我的(简化的)pom 文件:

父项目:

<artifactId>myproject</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>myproject</name>

<modules>
    <module>myproject-web</module>
    <module>myproject-ear</module>
</modules>

EAR 项目(使用 maven-ear-plugin):

<parent>
    <artifactId>myproject</artifactId>
    <groupId>mygroupid</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

<artifactId>myproject-ear</artifactId>
<packaging>ear</packaging>

<name>myproject-ear</name>

<dependencies>
    <dependency>
        <groupId>mygroupid</groupId>
        <artifactId>myproject-core</artifactId>
        <version>1.0-SNAPSHOT</version>
        <type>ejb</type>
    </dependency>
    <dependency>
        <groupId>mygroupid</groupId>
        <artifactId>myproject-web</artifactId>
        <version>1.0-SNAPSHOT</version>
        <type>war</type>
    </dependency>
</dependencies>

WAR 项目(使用 maven-war-plugin):

<parent>
    <artifactId>myproject</artifactId>
    <groupId>mygroupid</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

<artifactId>myproject-web</artifactId>
<packaging>war</packaging>

<name>myproject-web</name>

<dependencies>
    <dependency>
        <groupId>mygroupid</groupId>
        <artifactId>myproject-core</artifactId>
        <version>1.0-SNAPSHOT</version>
        <type>ejb</type>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

【问题讨论】:

  • 什么版本的 Netbeans?如果您使用的是开发版本,那么保存时部署现在会出现问题。具体来说,我已经重新打开了netbeans.org/bugzilla/show_bug.cgi?id=215976
  • 另外,您能否包含构建的日志文件输出?
  • @AlvinThompson 我使用的是 Netbeans 7.2。看来你是对的,这个错误是我遇到的问题。从错误报告看来,它适用于 Netbeans 7.1.2。如果您想将其发布为答案,我可以接受它,直到我有时间在 Netbeans 7.1.2 上对其进行正确测试。
  • 为什么会有这么旧的版本? Netbeans 7.3 改进了大部分内容,7.3.1 应该增加进一步的改进(包括对 Jboss 7.1.1 的支持)。开发版本(将是 7.4 或 8)改进了更多——如果你能忍受这些错误的话。
  • 很高兴听到它有帮助。那么你迁移到了哪个版本?

标签: java maven netbeans deployment glassfish


【解决方案1】:

这可能是您的 Netbeans 版本的错误。试试 Netbeans 7.3 版,看看它是否在那里工作。我提到的问题说它在 7.1.2 中有效,但我会先尝试 7.3。该问题已在 7.3 中得到解决,并且仅在 7.4/8 开发版本中再次出现问题。

【讨论】:

    【解决方案2】:

    您正在混合使用许多不同的魔法(NetBeans、Maven、Nexus 和自动部署),因此它不能完全按照您想要的方式工作也就不足为奇了。目前尚不清楚(从抽象工具开发人员的角度来看)当您尝试在部署中包含正在积极开发的项目的最新版本(即在 Netbeans 中打开的项目)时,正确的做法是什么,但该项目是关闭。回退到 Nexus 存储库中的版本可能不是实现自动部署的 Netbeans 开发人员的想法。

    我的建议是创建另一个工作区,在其中不将 JAR 作为项目包括在内,而是严格将其视为 Maven 和 NetBeans 配置中的第三方库。使用此工作区,除非您需要处理 JAR。

    或者,让 JAR 项目保持打开状态。

    【讨论】:

    • 是的,我知道这里所涉及的所有魔力以及使它们一起工作的难度,但不幸的是,您的建议不起作用,因为我的 JAR 包含 ejb,它们必须部署为maven-ear-plugin 中的“ejbmodule”。由于我正在考虑使用 Spring 的 ejb 遇到几个问题(这只是其中之一),那么你的建议会奏效。
    • @Hoffmann 是的,如果可以的话,我强烈建议不要使用 EJB。也就是说,我不明白将 JAR 视为来自供应商的问题。您将如何使用供应商提供的 EJB 设置项目?
    • 我相信我遇到的问题是 maven-ear-plugin,您必须在其中使用“ejbModule”标签定义 EJB(简单地将其作为依赖项不起作用,EJB 不不要开始)。这似乎是让 Netbeans 感到困惑的地方。我在使用 EJB 时遇到了几个问题,尤其是关于应用程序服务器(我必须部署在多个应用程序服务器上,并且在 J2EE 实现中管理它们的不一致是一场噩梦)。但是您能否详细说明不使用 EJB 的更多原因,以便我向我的团队证明这一点?
    • 正如您所发现的,EJB 支持/实现充其量是不一致的,就像浏览器和 HTML+CSS+JavaScript 一样。理论上这是一个好主意,将 EJB 作为正式规范的一部分对企业非常友好,但在实践中,我不知道 EJB 为您提供了在更便携的 Spring+Hibernate 中无法获得的东西形式。 (Spring 从一开始就旨在替代 EJB 等。)通常,当您使用 Spring 替换 EJB 时,您几乎可以免费更好地访问其他更现代的集成(例如 REST、JSON)。
    猜你喜欢
    • 2014-04-12
    • 2021-02-25
    • 1970-01-01
    • 2014-05-27
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多