我正在探索基于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打包?不知怎的,这看起来效率不高 .
关于我刚刚描述的内容的任何指示,想法或评论都将非常感激 . 感谢您阅读此... ... :)
Follow up a few days later...
我想在同一篇文章中提出无关紧要的问题而道歉 . 在其他地方提供JHipster模块是一个值得拥有的帖子 .
也就是说,这是关于Maven育儿问题的一些后续行动 .
我最终决定不让spring-boot-starter-parent成为我父母的父母:
我宁愿避免向其他模块引入太多不必要的依赖项,这些模块可能根本不关心spring-boot-starter .
所以我回滚了之前的更改,然后运行Maven dependency:resolve 目标以获取原始设置的传递依赖项列表 .
然后我将此部分添加到我的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 回答
至于你的第一个问题,你的所有创作都是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发电机的更多信息 .
问题1:这真的取决于 . 如果保留为主要父级,则spring-boot-parent表示所有子模块都将继承它 . 这样可以吗?是否存在子模块与 spring 无关的情况?你需要考虑那些案例 . 如果他们都是 Spring 天相关的,那么很可能你会好起来的,我说的很可能是因为这个特殊的父母甚至在 Spring 天相关的项目中 - 可能适合100%你可能需要做一些非常具体的事情(角落案例) . 最干净的解决方案是将此父项导入为“BOM”,如上一主题所示 . 不起作用的原因是您需要自己配置插件 .