将JHipster创建的组件提供给其他项目的最佳实践是什么?

时间:2016-01-14 22:20:48

标签: angularjs spring maven spring-boot jhipster

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

到目前为止,它非常有趣和有趣。我已经能够在没有太多麻烦的情况下运行并运行一个vanilla webapp。

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

JHipster生成的webapp项目将spring-boot-parent声明为其父项目:

<parent>
    <artifactId>spring-boot-starter-parent</artifactId>
    <groupId>org.springframework.boot</groupId>
    <version>1.3.1.RELEASE</version>
    <relativePath />
</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

中描述的步骤进行操作

我可以达到项目构建正常的程度,但运行mvn spring:boot时仍会出现错误。我只是因为收益不大而陷入困境,所以我决定回滚这些变化。

相反,我将spring-boot-parent声明为我父母的父母。

虽然这种策略似乎既适用于构建和运行,但现在我有两个主要问题。

首先,将spring-boot-parent声明为所有子项目的主要父项有什么意义?并非我不喜欢这个想法,因为大多数(如果不是全部)子项目确实依赖于Spring Boot。

但我应该注意这个策略是否有任何副作用?

第二个问题更关注JHipster。

将某些组件提供给非JHipster项目的最佳实践是什么?实体,存储库和服务很少完全属于webapp,应该与其他非前端组件共享。

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

或者我应该将JHipster项目声明为常规依赖项,只是让所有Angular内容都沿着WAR打包?不知怎的,这看起来效率不高。

对我刚刚描述的内容的任何指示,想法或评论都将非常感激。感谢您阅读此... ...)

几天后跟进......

我想在同一篇文章中提出无关的问题而道歉。在其他地方提供JHipster模块是一个值得拥有自己职位的话题。

尽管如此,这里有一些关于Maven育儿问题的后续行动。

我最终决定不让spring-boot-starter-parent成为我父母的父母:

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

所以我回滚了之前的更改,然后运行了Maven 依赖关系:解析目标,以获取原始设置的传递依赖关系列表。

然后我将此部分添加到我的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依赖:解决方案

与之前的传递依赖列表的比较给了我很好的提示我第一次尝试时出错的原因。

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

在这个手工劳动之后,我能够再次激活 spring-boot:run 目标。 :)

与其他地方所说的相反,我没有必要重新配置插件。但我想这只是我的好运。我明白为什么建议如此。

缺点是新POM比以前更大(更复杂)。

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

我很确定我仍然可以做更多的清理,但结果足以让我继续前进。

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

2 个答案:

答案 0 :(得分:0)

问题1:嗯,这真的取决于。如果保留为主要父级,则spring-boot-parent表示所有子模块都将继承它。这样可以吗?是否存在子模块与弹簧无关的情况?你需要考虑那些案例。如果他们都是春天相关的,那么很可能你会好起来的,而且我很可能也说,因为这个特殊的父母甚至在春天相关的项目中 - 可能适合100%你可能需要做一些非常具体的事情(角落案例)。最干净的解决方案是将此父级导入为“BOM”,如上一主题所示。无效的原因是您需要自己配置插件。

答案 1 :(得分:0)

至于你的第一个问题,你的所有创作都是Spring-Boot项目吗?这定义了父级是否需要Spring-Boot。父母可以为您节省指定依赖项的麻烦。

你的第二个问题是未知的副作用。如果您指定父级,则应该查看它并理解它。

对于你的第三个问题,听起来你需要学习如何创建自己的发电机。我和你做同样的事情。我首先创建了一个JHipster应用程序来学习。我现在已经创建了一堆。我有一个我删除并重新创建,破解,覆盖等称为“傻瓜”。每当我想测试一些东西时,我就会傻瓜,cd goof和yo jhipster。我已经编写了一个Mule组件(REST客户端),它与使用管理员登录的Swagger API呈现中描述的API进行通信。我将打破一个被剥夺的JHipster,它会丢失所有Angular的东西并且只托管API。但是,它不再是JHipster了,这将是我的事情。我将学习如何创建一个Yeoman生成器,它将是我的创作而不是JHipster的。使用JHipster,因为它在那里,做你的事情(如果需要的话使用Spring-Boot父级),但为你做的每件事都制作自己的生成器。听起来好像你想要自己的发电机给我。 JHipster是复杂的,它是开源的。把它搞砸并从中学习。但是要了解有关Yeoman发电机的更多信息。