从Maven存储库到内部存储库安装库及其依赖关系

时间:2015-01-06 17:53:33

标签: java maven gradle dependencies repository

问题

我在共享文件夹中有一个内部maven存储库说s:\mvnrepo - 它只是一个目录布局的约定。现在我想使用假设命令将com.example.lib:lib:1.0.0 及其依赖项从另一个外部maven存储库安装到s:\mvnrepo

mvn installlib com.example.lib:lib:1.0.0 -Dinto=file:///s:/mvnrepo 

那将是一个梦想!这样的事情可能吗?

(因为所有与maven有关的事情总是如此无法接近和复杂,所以我并不抱有很高的期望......)

补充资料

现在,我知道有像Nexus这样的maven存储库管理系统,但我确实认为我的用例不应该要求它们。我也知道deploy-file目标,但它没有将传递依赖项安装到指定的存储库中。

我还想过简单地创建一个虚拟项目,该项目在pom.xml中列出了特定的库。然后执行mvn install -Dinto=file:///s:/mvnrepo。问题是安装目标显然没有option来指定存储库目录(即-Dinto纯粹是假设的。)

我发现有可能download a library and all its dependencies with Intellij。这很棒但是Intellij实际上只下载了jar并且没有创建maven兼容的目录结构(即没有下载的poms,也没有组子文件夹中的jar等)。

背景资料

对于工作,我们希望拥有一个内部maven存储库,以便可以在新安装的服务器上构建一个没有Internet连接的应用程序,同时仍然可以在gradle文件中指定依赖项,就好像我们将使用像jcenter(resp.bintray)这样的外部maven存储库。所以我们使用的gradle文件看起来像这样:

repositories {
   // jcenter() // we don't want that
   mavenUrl 'file:///s:/mvnrepo'
}
dependencies {
  compile 'com.jakewharton.sdkmanager:gradle-plugin:0.12.0'
}

现在,我从mvnrepository.com下载了sdkmanager插件jar及其pom文件,并使用类似

的内容
mvn deploy:deploy-file -Dfile=sdkmanager.jar -Dpom=sdkmanager.pom -Durl=file:///s:/mvnrepo 

所有精致和花花公子,sdkmanager插件安装到s:\mvnrepo具有正确的目录布局,gradle甚至捡起它!但你知道,gradle并不十分满意。它要求jarchivelibcom.jakewharton.sdkmanager:gradle-plugin:0.12.0的依赖项(请参阅mvnrepository.com上的页面,其中jarchivelib确实列为sdkmanager插件的依赖项。现在,我可以重复这个乐趣并从mvnrepository.com下载jarchivelib及其pom,部署它等等。想一想......这听起来并不好玩!所以现在你看到了我的具体用例,也许你可以建议一个比我在我的问题中寻求的更好的方法。

0 个答案:

没有答案