我的公司给了我一个有趣的问题需要解决。我们有一个内部Artifactory服务器。出于原因,该服务器根本不在互联网上,但是,当配置完所有内容后,它将为公司中的每个产品提供所有依赖关系管理。如果库不在我们的神器服务器中,则炸毁构建和maven中心,并且在我们的防火墙中为典型用户阻止所有镜像。好?确定。
因此问题就变成了批准的库及其瞬态从maven central到我们的神器服务器。由于我们的服务器不是,也永远不会在互联网上,因此必须由管理员工作站完成。
由于原因,我必须在主库和它们的依赖项之间进行隔离。所以在神器中,我们有两个存储库,它看起来像这样:
third-party <- approved libraries
transients <- transient dependencies of approved libraries
因此,我希望能够在Gradle中实现这一目标,而不是尝试从头开始使用python。这就是我想要它做的事。
任务1.当批准库时,管理器会转到专门的gradle构建文件。他们输入库的典型信息作为依赖,与任何其他java应用程序没有什么不同(他们可以输入多个,但我会继续像他们刚刚输入一样)。他们执行任务。该任务将在构建下创建2个文件夹。 Build/thirdparty
,build/transient
。它将他们直接输入的文件下载到thirdparty文件夹中。这将是一个完整的下载,lib,源,jar,pom一切。基本上是maven repo的克隆。然后,对于任何瞬态依赖项,在transient文件夹中执行相同的操作。
任务2:一旦用户返回私人网络(最有可能涉及走过街道),他们就会发出第二个任务。该任务将采用build / thirdparty中的所有内容并将它们安装到artifactory.com/thridparty存储库中。然后从transient文件夹中取出所有内容并将它们安装到artifactory.com/transient存储库中。
关键是下载文件。有没有办法在gradle中我可以说直接依赖在这个文件夹和该文件夹中的瞬态?
- 修改
我正在阅读gradle 3.0源代码,我认为我运气不好,除非我破解报告插件并将其转换为我正在寻找的内容,否则我会感觉到这种感觉。
一个简单的怎么样。让gradle将libs放在一个文件夹中是件小事。如何让gradle将maven中央pom文件放在文件夹中?如果我可以创建一个允许我执行gradle prime-cache
的任务并让它拉下依赖jar,pom,src和javadocs并将它们放入我选择的文件夹中,我可以用python完成其余的工作。 / p>
答案 0 :(得分:1)
这不优雅,但可能有所帮助。假设我们有一个使用Spring Core,Spring Context和Spring JDBC的简单类:
package net.codetojoy.service;
import org.springframework.context.*;
import org.springframework.jdbc.core.JdbcTemplate;
public class UserService implements ApplicationContextAware {
private JdbcTemplate jdbcTemplate;
public void setApplicationContext(ApplicationContext applicationContext) {
}
}
然后,如果我们追踪&#34;直接依赖&#34; jars,我们可以使用configurations.compile
迭代所有的jar并对其进行排序。请参阅下面的myTask
:
apply plugin: 'java'
repositories {
mavenCentral()
}
def buildMap(g, n, v) {
return [group: g, name: n, version: v]
}
def SPRING_CORE = buildMap 'org.springframework','spring-core','4.3.2.RELEASE'
def SPRING_CONTEXT = buildMap 'org.springframework','spring-context','4.3.2.RELE
ASE'
def SPRING_JDBC = buildMap 'org.springframework','spring-jdbc','4.3.2.RELEASE'
def directDependencies = []
directDependencies << SPRING_CORE
directDependencies << SPRING_CONTEXT
directDependencies << SPRING_JDBC
dependencies {
compile SPRING_CORE
compile SPRING_CONTEXT
compile SPRING_JDBC
testCompile group: 'junit', name: 'junit', version: '4.12'
}
def isInDirectDependencies = { jar ->
def result = false
directDependencies.each { d ->
def regex = ".*${d.group}.*${d.name}.*${d.version}.*"
if (jar.absolutePath ==~ regex) {
result = true
}
}
return result
}
task myTask << {
configurations.compile.each { jar ->
def isTransitive = ! isInDirectDependencies(jar)
println "${jar.name} , isTransitive: ${isTransitive}"
}
}
另一种方法是解析gradle dependences
的输出,但上面给出的方法的优点是可以访问jar的完整路径。