我目前正在同时开展两个项目:
我如何设置maven以将OSS项目用作摩擦力最小的依赖项,因为我经常将这两者串联起来?
答案 0 :(得分:10)
我可以想到几个解决方案:
对现有的OSS项目进行Mavenize。这当然是“理想”选项,但通常不可行(即使您将新的构建系统与现有系统并行引入)。该项目可能存在一个与Maven标准布局不同的现有项目结构。开发人员可能不希望更改现有布局和构建脚本,使用Maven构建来使用非标准布局可能会很痛苦。在这两种情况下,你都搞砸了。
使用Maven包装现有的Ant构建。如果要在项目的生命周期中包含OSS项目的构建并将它们都内置在一个项目中,这可能会很好步。您可以查看this answer on SO,了解有关如何执行此操作的详细信息。
在现有版本中使用Apache Ivy或Maven Ant Task在本地存储库中生成并安装Maven工件。将此工件用作Maven项目中的常规依赖项(除非您必须手动声明其传递依赖项)。如果单独构建两个项目不是问题,这可能是更快,更少侵入性的方法。
看起来你选择了选项3.我认为这是一个快速获胜的好选择。
答案 1 :(得分:1)
我使用的解决方案是maven-ant任务(http://maven.apache.org/ant-tasks/)。
我在build.xml文件中添加了一个安装任务,该文件将已编译的.jar安装到本地存储库中。
虽然在项目中添加一个成熟的pom绝对是最好的方法,但这是一项重要的工作,并且在项目上造成了maven(其他用户不愿意使用它)。
答案 2 :(得分:0)
我认为您可能需要咬紧牙关并为您的OSS项目树设置POM。这是一个痛苦的部分(因为您需要根据OSS应用程序类型(即Web等)查找为各种插件指定资源路径的详细信息)。好消息是这是一次性的努力。
完成后,您的主项目可以将(包装的)OSS项目称为依赖项。这里将采用(标准maven)多项目结构。
答案 3 :(得分:0)
如果OSS项目具有依赖项 - 创建具有这些依赖项的POM(您的项目将使用它们作为传递依赖项)并将该工件和pom安装在本地存储库中。如果OSS项目没有任何其他依赖项更简单 - 在安装过程中会自动生成POM。
对于这两种情况,请使用maven-install-plugin。
mvn install:install-file -Dfile=your-artifact-1.0.jar \
[-DpomFile=your-pom.xml] \
[-Dsources=src.jar] \
[-Djavadoc=apidocs.jar] \
[-DgroupId=org.some.group] \
[-DartifactId=your-artifact] \
[-Dversion=1.0] \
[-Dpackaging=jar] \
[-Dclassifier=sources] \
[-DgeneratePom=true] \
[-DcreateChecksum=true]