繁体   English   中英

积极开发JAR和依赖JAR时的开发实践?

[英]Development practices when actively developing both JAR and dependent JARs?

是的,我知道,标题很烂-尽我所能描述。

当您有也在开发中的依赖JAR以及如何在本地进行构建以及如何使用CI(Jenkins)时,我正在努力让我了解开发JAR的概念。 设置如下:

假设我有一个Maven项目(Java代码),该项目创建了一个不错的,可自行部署的JAR,称为KillerApplicationSpaceship。 这个项目依赖于我也在开发的许多第三方库(作为托管依赖项)中的几个JAR。 将它们称为KillerLibraryLister和KillerLibraryRimmer。 他们有自己的Maven项目。 我可以随时加入其中任何一个,并“ mvn编译”,生活很美好。

我在一台计算机上安装了Jenkins,该计算机监视所有三个项目的GitHub存储库。 每当推动代码更改时,都会触发构建。 每当KillerLibraryLister或KillerLibraryRimmer成功构建时,也会触发KillerApplicationSpaceship的构建。 这三个JAR都在构建时被推送到Maven存储库,并且KillerApplicationSpaceship在该存储库中将这两个库指定为托管依赖项。 生活是美好的,除了对其中一个库进行更改,同时启动KillerApplicationSpaceship的构建并不会对库进行更改之外! 它们的版本号不会更改,因此始终使用库的缓存版本。

在我们所生活的现代世界中,如何正确地对库进行开发并确保KillerApplicationSpaceship在构建库时将其拾取? 有没有办法说“总是从存储库中检索此JAR。总是,总是?”

现在,让我们更进一步。 当然,我也可以在本地构建这些项目。 我希望能够在本地计算机上“ mvn清洁程序包” KillerApplicationSpaceship-但是POM指定这两个库是Maven存储库中的托管依赖项。 正如我提到的,我的Jenkins盒子将它们成功地推送到我的开发存储库中,但这在开发过程中存在问题,原因有两个:

首先,如上所述,即使版本有所变化,我似乎也没有获得最新版本,因为版本号没有变化。

其次,更重要的是,在进行开发时,我并没有做出任何小的改动就将其推向GitHub,而是希望在本地进行经常的编译和测试。 在本地。

如何引用我的KillerLibraryLister和KillerLibraryRimmer项目的本地版本? 如果我在KillerApplicationStarship中使它们不受管理,那么我的Jenkins框也希望它们不受管理-因为我们都使用相同的POM。

在我看来,我想要的是本地计算机上的LOCAL构建,以引用两个库中每个库的最新本地构建,但是如果构建在Jenkins框上,请引用Maven存储库中的最新版本,因为最后签入的版本。 我当然不知道该怎么做。

这可能会受到更多限制,因为其他应用程序会使用该库JAR,例如,其中一个是使用SBT构建的(这是使用Scalatra的Scala应用程序)。 因此,使用模块制作父POM并不是一种选择。 SBT项目具有一个build.scala文件,该文件指定远程Maven存储库上的库JAR文件。 但是可以肯定的是,我不需要每次对它们进行代码更改都将这些JAR推送到存储库中(请记住,它们也处于活跃的开发中)。

在最喜欢的书中有一章很简单,从概念上讲,这一切都说明了,是吗? 对于这种开发,我可能会错过明显的“最佳实践”。

在过去的五到六年中,我一直在进行Web开发和单块项目,因此这对我来说是一种范式转变。 我得到的代码。 我需要一些项目管理和构建实践方面的跟进。

非常感谢任何成人的监督! ;)

有两种解决您的问题的方法

  • 要么将所有项目都放在一个maven项目树中,然后全部构建一次,那么就不会出现不同步的机会

如果你不能做到以上

  • 针对发布而不是快照进行开发,例如,当您想要更改B的代码进行发布并更改项目A中的依赖版本以获取特定版本时,例如,项目A将B用作依赖

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM