是的,我知道,这个标题太糟糕了 - 它尽可能具有描述性。
当你有正在开发的依赖JAR,以及如何在本地构建以及使用CI(Jenkins)时,我正试图让我的大脑围绕开发JAR的概念。这是设置:
假设我有一个Maven项目(Java代码),它创建了一个名为KillerApplicationSpaceship的漂亮的自我部署JAR。这个项目依赖于许多第三方库(作为托管依赖项),我正在开发的几个JAR。称他们为KillerLibraryLister和KillerLibraryRimmer。他们有自己的Maven项目。我可以随便进入其中任何一个并且“mvn编译”我喜欢和生活是伟大的。
我在一台机器上安装了Jenkins,该机器监控所有三个项目的GitHub存储库。每当推送代码更改时,都会触发构建。每当KillerLibraryLister或KillerLibraryRimmer成功构建时,KillerApplicationSpaceship也会被触发。所有三个JAR在构建时都被推送到Maven存储库,KillerApplicationSpaceship将这两个库指定为此存储库中的托管依赖项。生活是美好的,除了对任何一个库进行更改,同时开始构建KillerApplicationSpaceship时,不会对库进行更改!它们的版本号不会改变,因此总是使用库的缓存版本。
在我们所处的这个现代世界中,如何正确地对图书馆进行开发并确保图书馆的每个版本在构建时都被KillerApplicationSpaceship选中?有没有办法说“总是从存储库中检索这个JAR。总是,总是?”
现在让我们更进一步。当然,我也可以在本地建立这些项目。我希望能够在我的本地机器上“mvn clean package”KillerApplicationSpaceship - 但是POM指定这两个库是Maven存储库中的托管依赖项。正如我所提到的,我的Jenkins框在成功构建时将它们推送到我的开发存储库,但这在开发期间存在问题,原因有两个:
首先,如上所述,即使发生了变化,我似乎也没有获得最新版本,因为版本号没有变化。
其次,更重要的是,在进行开发时,我并没有在每次小的改动中向GitHub推送,但在本地我想经常编译和测试。本地。
如何引用KillerLibraryLister和KillerLibraryRimmer项目的LOCAL版本?如果我在KillerApplicationStarship中使它们不受管理,那么我的Jenkins盒子也希望它们不受管理 - 因为我们都使用相同的POM。
在我看来,我想要的是在本地机器上进行LOCAL构建,以引用两个库中每个库的最新本地构建,但如果构建在Jenkins盒上,则引用Maven存储库中的最新版本,因为那是最后一个签到版本。当然,我不清楚我是怎么做到的。
这可能会受到更多限制,因为库JAR被其他应用程序使用,例如,其中一个使用SBT构建(它是使用Scalatra的Scala应用程序)。因此,在这里制作带有模块的父POM不是一个选择。 SBT项目有一个build.scala文件,用于指定远程Maven存储库上的库JAR文件。但是我肯定不想每次都将这些JAR推送到存储库 我对它们进行代码更改(记住,它们也在积极开发中)。
在一本最喜欢的书中必须有一个简单的章节,从概念上讲,这一切都是什么?我可能错过了这种发展的明显“最佳实践”。
在过去的五六年里,我一直在做web-dev和单一单片项目,所以这对我来说是一种范式转换。我得到的代码。项目管理和构建实践让我需要一些追赶。
非常感谢任何成年人的监督! ;)
答案 0 :(得分:0)
您的问题有两种解决方案
如果你不能做上面