Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何组织我的项目';针对多个库版本的代码库_Java_Git_Github_Maven 3 - Fatal编程技术网

Java 我如何组织我的项目';针对多个库版本的代码库

Java 我如何组织我的项目';针对多个库版本的代码库,java,git,github,maven-3,Java,Git,Github,Maven 3,我正在编写一个小型库L1,它依赖于第三方库L2L2有多个版本,L1需要能够支持。每个版本的L2都绑定到给定的特定API和目标JDK。我无法控制L2 例如: L2-v1.x->我需要能够提供L1-v1.x L2-v2.x->我需要能够提供L1-v2.x L2-v3.x->我需要能够提供L1-v3.x 在知道必须使用Maven构建项目并且希望构建尽可能简单的情况下,用git组织代码的最佳方式是什么(我应该在master中放置什么/我应该有什么分支/我应该有多个项目/多个模块) 先谢谢你 编辑:所

我正在编写一个小型库
L1
,它依赖于第三方库
L2
L2
有多个版本,
L1
需要能够支持。每个版本的
L2
都绑定到给定的特定API和目标JDK。我无法控制
L2

例如:

  • L2-v1.x
    ->我需要能够提供
    L1-v1.x
  • L2-v2.x
    ->我需要能够提供
    L1-v2.x
  • L2-v3.x
    ->我需要能够提供
    L1-v3.x
在知道必须使用Maven构建项目并且希望构建尽可能简单的情况下,用git组织代码的最佳方式是什么(我应该在master中放置什么/我应该有什么分支/我应该有多个项目/多个模块)

先谢谢你


编辑:所有版本的L2都在Maven Central中,所有版本的L1都必须在Central中。

如果这些库源不在Maven repo中,则您可以遵循。“
这对于将回购的预测版本与另一个版本联系起来非常有用

以下是适合您的设置的版本:

  • 您将Maven项目设置为具有父pom和您自己的项目
    L1
    作为该项目的Maven模块

  • 将所需的项目导入到项目中。例如L2项目

  • 在父pom.xml中,添加L2文件夹作为模块

  • 谢谢你的回答。我编辑了我的问题:事实上,L1的所有代码都应该在中央,L2版本已经作为依赖项提供。它对您的方法有何影响?@kraal正如链接文章所说,如果L2在maven中,那么您就不需要模块方法:一个简单的依赖声明就足够了。那么我如何使用不同的源JDK和目标JDK处理子模块呢?使用相同的JDK编译所有内容可能会导致意外的错误。一些项目使用模块,其他项目使用不同的分支,其他不同的项目,一些项目使用Maven限定符,但还不清楚什么是最佳实践。到目前为止,我一直在使用模块,但我不相信这是最好的解决方案。@kraal我同意,在这一点上我没有足够的经验提供建议。我将把我的答案留给其他可能适用的人。
    git submodule add /url/to/L2.git
    cd L2
    git checkout <L2-vy.x>
    cd ..
    git add .
    git commit -m "Add submodule L2 at  <L2-vy.x>"
    git push
    
    yourParentProject
    - pom.xml 
    - .git
    - .gitmodule
    - L1
      \- pom.xml
    - L2
      \- pom.xml
    
    <modules>
      <module>L1</module>
      <module>L2</module>
    </modules>
    
    <groupId>com.github.user.L2</groupId>
    <artifactId>L2</artifactId>
    <version>L2-vy.x</version>
    
    git submodule update --init