我最近正在构建一个CI系统,其中几个项目将与共享的本地存储库同时构建。
为了找到解决方案并使其简单化,我编写了一个脚本来模拟在Mac OS上本地跨多个Maven进程并发构建的情况,如下所示。
task(){
cd "$1"; pwd;
mvn -gs /Users/xx/settings-pre.xml clean package -Dmaven.repo.local=/Users/xx/.m2/repository -DskipTests -e -U
}
## clean local repo before concurrent build
rm -rf /Users/xx/.m2/repository
## set maven env
source ~/newwork/script/set_maven_3.5.0.sh
## I've got 10 project with same code in current dir
## so mvn clean package will be executed in project1, project2.... project10
for d in ./*/; do
## task will be exec concurrently
task "$d" &
done
我已经尝试了使用Maven-3.5.0的Takari扩展(http://takari.io/book/30-team-maven.html),但并发构建失败。x1c 0d1x
我尝试过Maven-3.9.0和命名锁(https://maven.apache.org/resolver/maven-resolver-named-locks/index.html),但仍然失败。
mvn -gs /Users/ninan/work/apache-maven-3.8.5/conf/settings-pre.xml clean package -Dmaven.repo.local=/Users/ninan/.m6/repository -DskipTests -e -U -Daether.syncContext.named.factory=file-lock -Daether.syncContext.named.nameMapper=file-gav -Daether.syncContext.named.time=120
1我想知道我的本地测试方法是否有问题,比如我用错了方法使用了named lock等等。
如果没有,我能做些什么来解决这个问题。
谢谢。
1条答案
按热度按时间osh3o9ms1#
我认为让maven做任何级别的并发都是个坏主意,原因如下:
你想要的正好相反:稳定的测试和清晰的结果,你没有时间去玩和实验。让其他人来测试新的Maven特性。
因此,您应该尽可能地将所有需要的并发性从Maven转移到管道本身:
所以总结一下,不要给予Maven太多的工作要做,而是把它切成小块。我认为你不应该朝着你所描述的方向去。