是的,我知道,标题糟透了-这是我所能得到的描述性的。
当你有一个依赖的JAR (也在开发中),以及如何在本地构建以及使用CI (Jenkins)的时候,我试图让我的大脑了解开发JAR的概念。下面是设置:
假设我有一个Maven项目(Java代码),它创建了一个名为KillerApplicationSpaceship的漂亮的、自部署的JAR。这个项目依赖于许多第三方库(作为托管依赖项),以及我正在开发的几个JAR。叫他们KillerLibraryLister和KillerLibraryRimmer。他们有自己的Maven项目。我可以随心所欲地进入其中的任何一个,"mvn编译“,任何时候,我喜欢,生活是伟大的。
我在一台监视所有三个项目的GitHub存储库的机器上安装了Jenkins。每当推送代码更改时,就会触发生成。每当KillerApplicationSpaceship或KillerLibraryLister或KillerLibraryRimmer成功构建时,也会触发生成。在构建Maven存储库时,所有三个JAR都被推送到Maven存储库中,KillerApplicationSpaceship将这两个库指定为存储库中的托管依赖项。生活是美好的,除了对任何一个库进行更改,同时启动KillerApplicationSpaceship的构建,都不会对库进行更改!它们的版本号不会更改,因此始终使用库的缓存版本。
在我们所处的现代世界中,如何正确地在库上进行开发,并确保库的每个构建在构建时都被KillerApplicationSpaceship捕获?有没有一种方法可以说“总是从存储库中取回这个罐子,总是,总是这样?”
现在让我们再走一步。当然,我也可以在当地建造这些项目。我希望能够在我的本地机器上“managed”KillerApplicationSpaceship --但是POM指定这两个库是Maven存储库中的托管依赖项。正如我前面提到的,我的Jenkins盒将它们推送到成功构建的开发存储库,但是在开发过程中这是有问题的,原因有两个:
首先,如前所述,我似乎没有得到最新的版本,即使发生了更改,因为版本号没有改变。
第二,也是更重要的是,在进行开发时,我并不是用每一个小的更改都推进到GitHub,而是希望经常在本地编译和测试。本地的。
如何引用本地构建的KillerLibraryLister和KillerLibraryRimmer项目?如果我在KillerApplicationStarship中使它们非托管,那么我的Jenkins框也希望它们是非托管的--因为我们都在使用相同的POM。
在我看来,我希望本地机器上的本地构建引用两个库中每个库的最新本地构建,但如果构建在Jenkins框上,则在Maven存储库中引用最新版本,因为这是最后签入的版本。当然,我不知道我会怎么做。
这可能会受到更大的限制,因为库JAR由其他应用程序使用,例如,其中一个是使用SBT构建的(它是一个使用Scalatra的Scala应用程序)。因此,使用模块创建父POM并不是一种选择。SBT项目有一个build.scala文件,该文件指定远程Maven存储库上的库JAR文件。但是,我当然不想每次对这些JAR进行代码更改时都将它们推到存储库中(记住,它们也在积极开发中)。
在一本最受欢迎的书中,肯定有一个简单的章节:“从概念上说,是的,这一切都会分崩离析,是吗?我可能错过了这种发展中显而易见的”最佳实践“。
在过去的五、六年里,我一直在做web和单块的项目,所以这对我来说是一个范式的转变。我得到的密码。项目管理和构建实践让我需要一些赶超。
非常感谢任何成年人的监督!)
发布于 2014-06-10 22:49:31
你的问题有两种解决办法
如果你不能做上面的事
https://stackoverflow.com/questions/24152049
复制相似问题