mirror of
https://github.com/ethauvin/kobalt.git
synced 2025-04-26 08:27:12 -07:00
* proxy handling improved for repositories defined in transitive dependencies.
proxy config now looks like: <proxies> <proxy> <host>mycompany.com</host> <port>3128</port> <type>http</type> <nonProxyHosts>localhost</nonProxyHosts> </proxy> <proxy> <host>mycompany.com</host> <port>3128</port> <type>https</type> <nonProxyHosts>localhost</nonProxyHosts> </proxy> </proxies>
This commit is contained in:
parent
e0dc269a89
commit
e9416db9e7
7 changed files with 43 additions and 16 deletions
|
@ -32,7 +32,7 @@ fun plugins(vararg dependencies : String) {
|
|||
}
|
||||
}
|
||||
|
||||
data class ProxyConfig(var host: String = "", var port: Int = 0, val type: String = "") {
|
||||
data class ProxyConfig(val host: String = "", val port: Int = 0, val type: String = "", val nonProxyHosts: String = "") {
|
||||
fun toProxy() = java.net.Proxy(java.net.Proxy.Type.HTTP, InetSocketAddress(host, port))
|
||||
|
||||
fun toAetherProxy() = Proxy(type, host, port) // TODO make support for proxy auth
|
||||
|
|
|
@ -23,8 +23,8 @@ class KobaltSettingsXml {
|
|||
@XmlElement(name = "default-repos") @JvmField
|
||||
var defaultRepos: DefaultReposXml? = null
|
||||
|
||||
@XmlElement(name = "proxy") @JvmField
|
||||
var proxy: ProxyXml? = null
|
||||
@XmlElement(name = "proxies") @JvmField
|
||||
var proxies: ProxiesXml? = null
|
||||
|
||||
@XmlElement(name = "kobalt-compiler-version") @JvmField
|
||||
var kobaltCompilerVersion: String = "1.0.0"
|
||||
|
@ -33,6 +33,11 @@ class KobaltSettingsXml {
|
|||
var kobaltCompilerRepo: String? = null
|
||||
}
|
||||
|
||||
class ProxiesXml {
|
||||
@XmlElement @JvmField
|
||||
var proxy: List<ProxyXml> = arrayListOf()
|
||||
}
|
||||
|
||||
class ProxyXml {
|
||||
@XmlElement @JvmField
|
||||
var host: String = ""
|
||||
|
@ -42,6 +47,9 @@ class ProxyXml {
|
|||
|
||||
@XmlElement @JvmField
|
||||
var type: String = ""
|
||||
|
||||
@XmlElement @JvmField
|
||||
var nonProxyHosts: String = ""
|
||||
}
|
||||
|
||||
class DefaultReposXml {
|
||||
|
@ -49,6 +57,8 @@ class DefaultReposXml {
|
|||
var repo: List<String> = arrayListOf()
|
||||
}
|
||||
|
||||
fun List<ProxyConfig>.getProxy(protocol:String) = find { it.type==protocol }
|
||||
|
||||
/**
|
||||
* The object Kobalt refers to for settings.
|
||||
*/
|
||||
|
@ -61,7 +71,7 @@ class KobaltSettings @Inject constructor(val xmlFile: KobaltSettingsXml) {
|
|||
|
||||
val defaultRepos = xmlFile.defaultRepos?.repo
|
||||
|
||||
val proxyConfig = with(xmlFile.proxy) {
|
||||
val proxyConfigs = with(xmlFile.proxies?.proxy) {
|
||||
fun toIntOr(s: String, defaultValue: Int) = try { //TODO can be extracted to some global Utils
|
||||
s.toInt()
|
||||
} catch(e: NumberFormatException) {
|
||||
|
@ -69,7 +79,9 @@ class KobaltSettings @Inject constructor(val xmlFile: KobaltSettingsXml) {
|
|||
}
|
||||
|
||||
if (this != null) {
|
||||
ProxyConfig(host, toIntOr(port, 0), type)
|
||||
map {proxyXml->
|
||||
ProxyConfig(proxyXml.host, toIntOr(proxyXml.port, 0), proxyXml.type, proxyXml.nonProxyHosts)
|
||||
}
|
||||
} else null
|
||||
}
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ class Http @Inject constructor(val settings:KobaltSettings) {
|
|||
}
|
||||
|
||||
fun get(user: String?, password: String?, url: String) : Response {
|
||||
val client = OkHttpClient.Builder().proxy(settings.proxyConfig?.toProxy()).build()
|
||||
val client = OkHttpClient.Builder().proxy(settings.proxyConfigs?.firstOrNull()?.toProxy()).build()
|
||||
val request = Request.Builder().url(url)
|
||||
if (user != null) {
|
||||
request.header("Authorization", Credentials.basic(user, password))
|
||||
|
@ -75,7 +75,7 @@ class Http @Inject constructor(val settings:KobaltSettings) {
|
|||
.build()
|
||||
|
||||
log(2, "Uploading $file to $url")
|
||||
val response = OkHttpClient.Builder().proxy(settings.proxyConfig?.toProxy()).build().newCall(request).execute()
|
||||
val response = OkHttpClient.Builder().proxy(settings.proxyConfigs?.firstOrNull()?.toProxy()).build().newCall(request).execute()
|
||||
if (! response.isSuccessful) {
|
||||
error(response)
|
||||
} else {
|
||||
|
|
|
@ -6,6 +6,7 @@ import com.beust.kobalt.api.Kobalt
|
|||
import com.beust.kobalt.homeDir
|
||||
import com.beust.kobalt.internal.KobaltSettings
|
||||
import com.beust.kobalt.internal.KobaltSettingsXml
|
||||
import com.beust.kobalt.internal.getProxy
|
||||
import com.beust.kobalt.maven.CompletedFuture
|
||||
import com.beust.kobalt.maven.MavenId
|
||||
import com.beust.kobalt.misc.KobaltLogger
|
||||
|
@ -73,17 +74,21 @@ class ExcludeOptionalDependencyFilter: DependencyFilter {
|
|||
@Singleton
|
||||
class Aether(val localRepo: File, val settings: KobaltSettings) {
|
||||
private val system = Booter.newRepositorySystem()
|
||||
private val session = Booter.newRepositorySystemSession(system, localRepo)
|
||||
private val session = Booter.newRepositorySystemSession(system, localRepo, settings)
|
||||
private val classpathFilter = AndDependencyFilter(
|
||||
ExcludeOptionalDependencyFilter(),
|
||||
DependencyFilterUtils.classpathFilter(JavaScopes.COMPILE))
|
||||
private val kobaltRepositories : List<RemoteRepository>
|
||||
get() = Kobalt.repos.map {
|
||||
RemoteRepository.Builder("maven", "default", it.url)
|
||||
.setProxy(settings.proxyConfig?.toAetherProxy())
|
||||
get() = Kobalt.repos.map {
|
||||
RemoteRepository.Builder("maven", "default", it.url)
|
||||
// .setSnapshotPolicy(RepositoryPolicy(false, null, null))
|
||||
.build()
|
||||
.build().let { repository ->
|
||||
val proxyConfigs = settings.proxyConfigs ?: return@map repository
|
||||
RemoteRepository.Builder(repository).apply {
|
||||
setProxy(proxyConfigs.getProxy(repository.protocol)?.toAetherProxy())
|
||||
}.build()
|
||||
}
|
||||
}
|
||||
|
||||
private fun collectRequest(artifact: Artifact) : CollectRequest {
|
||||
with(CollectRequest()) {
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.beust.kobalt.maven.aether
|
||||
|
||||
import com.beust.kobalt.internal.KobaltSettings
|
||||
import org.eclipse.aether.DefaultRepositorySystemSession
|
||||
import org.eclipse.aether.RepositorySystem
|
||||
import org.eclipse.aether.repository.LocalRepository
|
||||
|
@ -14,8 +15,8 @@ object Booter {
|
|||
// return org.eclipse.aether.examples.plexus.PlexusRepositorySystemFactory.newRepositorySystem();
|
||||
}
|
||||
|
||||
fun newRepositorySystemSession(system: RepositorySystem, repo: File): DefaultRepositorySystemSession {
|
||||
val session = MavenRepositorySystemUtils.newSession()
|
||||
fun newRepositorySystemSession(system: RepositorySystem, repo: File, settings: KobaltSettings): DefaultRepositorySystemSession {
|
||||
val session = MavenRepositorySystemUtils.newSession(settings)
|
||||
|
||||
val localRepo = LocalRepository(repo.absolutePath)
|
||||
session.localRepositoryManager = system.newLocalRepositoryManager(session, localRepo)
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.beust.kobalt.maven.aether
|
||||
|
||||
import com.beust.kobalt.internal.KobaltSettings
|
||||
import org.apache.maven.repository.internal.*
|
||||
import org.eclipse.aether.DefaultRepositorySystemSession
|
||||
import org.eclipse.aether.artifact.DefaultArtifactType
|
||||
|
@ -12,6 +13,7 @@ import org.eclipse.aether.util.graph.selector.OptionalDependencySelector
|
|||
import org.eclipse.aether.util.graph.selector.ScopeDependencySelector
|
||||
import org.eclipse.aether.util.graph.transformer.*
|
||||
import org.eclipse.aether.util.graph.traverser.FatArtifactTraverser
|
||||
import org.eclipse.aether.util.repository.DefaultProxySelector
|
||||
import org.eclipse.aether.util.repository.SimpleArtifactDescriptorPolicy
|
||||
|
||||
object MavenRepositorySystemUtils {
|
||||
|
@ -26,7 +28,7 @@ object MavenRepositorySystemUtils {
|
|||
return locator
|
||||
}
|
||||
|
||||
fun newSession(): DefaultRepositorySystemSession {
|
||||
fun newSession(settings: KobaltSettings): DefaultRepositorySystemSession {
|
||||
val session = DefaultRepositorySystemSession()
|
||||
val depTraverser = FatArtifactTraverser()
|
||||
session.dependencyTraverser = depTraverser
|
||||
|
@ -55,6 +57,13 @@ object MavenRepositorySystemUtils {
|
|||
val sysProps = System.getProperties()
|
||||
session.setSystemProperties(sysProps)
|
||||
session.setConfigProperties(sysProps)
|
||||
settings.proxyConfigs?.let { proxyConfigs->
|
||||
session.proxySelector = DefaultProxySelector().apply {
|
||||
proxyConfigs.forEach {config->
|
||||
add(config.toAetherProxy(), config.nonProxyHosts)
|
||||
}
|
||||
}
|
||||
}
|
||||
return session
|
||||
}
|
||||
}
|
||||
|
|
|
@ -59,7 +59,7 @@ class GithubApi2 @Inject constructor(
|
|||
// Read only Api
|
||||
//
|
||||
private val service = Retrofit.Builder()
|
||||
.client(OkHttpClient.Builder().proxy(settings.proxyConfig?.toProxy()).build())
|
||||
.client(OkHttpClient.Builder().proxy(settings.proxyConfigs?.firstOrNull()?.toProxy()).build())
|
||||
.baseUrl("https://api.github.com")
|
||||
.addConverterFactory(GsonConverterFactory.create())
|
||||
.build()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue