我在共享文件夹中有一个内部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并不十分满意。它要求jarchivelib
是com.jakewharton.sdkmanager:gradle-plugin:0.12.0
的依赖项(请参阅mvnrepository.com上的页面,其中jarchivelib
确实列为sdkmanager插件的依赖项。现在,我可以重复这个乐趣并从mvnrepository.com下载jarchivelib
及其pom,部署它等等。想一想......这听起来并不好玩!所以现在你看到了我的具体用例,也许你可以建议一个比我在我的问题中寻求的更好的方法。