让 JHipster 创建的组件可用于其他项目的最佳实践是什么?

What is the best practice to make components created by JHipster available to other projects?

我正在探索 JHipster,Spring Boot + Angular基于 Yeoman 的 JS 应用程序生成器。

到目前为止,一切都很有趣。我已经能够毫不费力地启动和 运行ning 香草网络应用程序。

现在我想更进一步,将实体、存储库和服务从原来的 webapp 项目中移走。

JHipster 生成的 webapp 项目声明 spring-boot-parent 作为它的 parent 项目:

<parent>
    <artifactId>spring-boot-starter-parent</artifactId>
    <groupId>org.springframework.boot</groupId>
    <version>1.3.1.RELEASE</version>
    <relativePath />
</parent>

所以我将其更改为我自己的 parent 项目,它看起来像:

<parent>
    <groupId>br.net.neuromancer.bigpolis</groupId>
    <artifactId>bigpolis-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

我立刻被 Maven 构建异常淹没了。 :(

然后我按照 Spring Boot - parent pom when you already have a parent pom

中描述的步骤操作

我可以到达项目构建正常的地步,但在 运行ning mvn spring:boot 时仍然出现错误。事倍功半,所以我决定回滚更改。

相反,我将 spring-boot-parent 声明为我自己 parent 的 parent。

虽然这个策略似乎对构建和 运行ning 都有效,但现在我有两个主要问题。

首先,将 spring-boot-parent 声明为主要 parent 对我所有的 sub-projects 有什么影响?并不是说我非常不喜欢这个想法,因为大多数(如果不是全部)sub-projects 无论如何都依赖于 Spring 引导。

但是我应该注意这个策略有什么副作用吗?

第二个问题更接近JHipster。

使某些组件可用于 non-JHipster 项目的最佳做法是什么?实体、存储库和服务很少独属于 webapp,应该与其他 non-frontend 组件共享。

我能否将它们移到一个单独的项目中,也许会失去 Yeoman 提供的重构功能?

或者我应该将 JHipster 项目声明为常规依赖项,只是让所有 Angular 的东西沿着 WAR 打包?不知何故,这似乎不太有效。

任何对我刚才描述的内容的指示、想法或评论都将不胜感激。感谢您阅读到这里...:)

过几天再跟进...

我很抱歉在同一 post 中提出了不相关的问题。使 JHipster 模块在其他地方可用是一个值得 post 单独讨论的主题。

也就是说,这里有一些 follow-up 关于 Maven parenting 问题。

我终于决定不让 spring-boot-starter-parent 成为我自己的 parent parent:

我更愿意避免向其他模块引入太多不必要的依赖项,这些模块可能根本不关心 spring-boot-starter。

所以我回滚了早期的更改,然后 运行 Maven dependency:resolve 目标获取 t运行sitive 依赖项的列表原始设置。

然后我将此部分添加到我的 JHipster pom.xml:

    <dependency>
        <!-- Import dependency management from Spring Boot -->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>${spring-boot.version}</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>

我必须明确声明缺少的版本标签,直到 Eclipse 内外的构建都满意为止。

只有我运行又mvn dependency:resolution.

与之前的 t运行sitive 依赖关系列表的比较给了我很好的提示,让我了解我在第一次尝试时遇到的错误原因。

我耐心地修复了每个不匹配的问题,在我的 POM 上声明了变量和依赖项,直到我在两个设置上的所有依赖项的版本完全相同。

经过这次体力劳动,我能够再次激活 spring-boot:运行 目标。 :)

与其他地方所说的相反,我不需要 re-configure 插件。但我想这只是我的好运气。我明白为什么建议有效。

缺点是新的 POM 最终比以前大得多(也更复杂)。

https://github.com/javayuga/BigPolis/blob/master/bigpolis-parent/tserd14Browser/pom.xml

我很确定我还能做更多的清理工作,但结果足以让我继续前进。

我要感谢所有回复的人,给我一些思考。 :)

问题 1:这真的取决于。如果您将 parent、spring-boot-parent 作为主 parent,这意味着您所有的 sub-module 都将从它继承。这样可以吗?是否存在子模块根本不 spring 相关的情况?您需要考虑这些情况。如果它们都是 spring 相关的,很可能你会没事的,我说的很可能是因为这个特定的 parent 即使在 spring 相关的项目中 - 可能 100% 适合你可能需要的地方做一些非常具体的事情(极端情况)。最干净的解决方案是将此 parent 导入为 'BOM',如前一个主题所建议的那样。不行的原因是你需要自己配置插件。

关于你的第一个问题,你所有的创作都是Spring-Boot项目吗?这定义了 parent 是否需要 Spring-Boot。 parent 是为了省去指定依赖项的麻烦。

你的第二个问题是关于未知的 side-effects。如果你指定parent,你应该看看它并理解它。

对于你的第三个问题,听起来你需要学习如何创建自己的生成器。我正在做和你差不多的事情。我首先创建了一个 JHipster 应用程序来学习。我现在已经创建了一堆。我有一个我删除并 re-create、黑客、覆盖等称为 "goof"。每次我想测试一些东西时,我都会 mkdir goof、cd goof 和 yo jhipster。我已经编写了一个 Mule 组件(REST 客户端),它与使用管理员登录的 Swagger API 渲染中描述的 API 对话。我将制作一个精简的 JHipster,它会丢失所有 Angular 的内容,并且只托管 API。但是,它不再是 JHipster,它将是我的东西。我将学习如何创建 Yeoman 生成器,这将是我的创作而不是 JHipster 的。使用 JHipster 因为它在那里,做你的事(如果需要使用 Spring-Boot parent)但是为你所做的每件事制作你自己的生成器。听起来你想要我自己的发电机。 JHipster 很复杂而且是开源的。破解它并从中学习。但是去了解更多关于 Yeoman 生成器的信息。