mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-27 16:12:48 +08:00
Support multi remote servers; Support maven local & gradle local
This commit is contained in:
parent
5df5ecc444
commit
0570a50e5e
@ -21,7 +21,7 @@ internal object PluginSharedLibraries : AbstractTestPoint() {
|
|||||||
if (System.getenv("CI").orEmpty().toBoolean()) {
|
if (System.getenv("CI").orEmpty().toBoolean()) {
|
||||||
println("CI env")
|
println("CI env")
|
||||||
File("config/Console/PluginDependencies.yml").writeText(
|
File("config/Console/PluginDependencies.yml").writeText(
|
||||||
"repoLoc: 'https://repo.maven.apache.org/maven2'"
|
"repoLoc: ['https://repo.maven.apache.org/maven2']"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
File("plugin-shared-libraries").mkdirs()
|
File("plugin-shared-libraries").mkdirs()
|
||||||
|
@ -13,7 +13,8 @@ import net.mamoe.mirai.console.data.ReadOnlyPluginConfig
|
|||||||
import net.mamoe.mirai.console.data.ValueDescription
|
import net.mamoe.mirai.console.data.ValueDescription
|
||||||
import net.mamoe.mirai.console.data.value
|
import net.mamoe.mirai.console.data.value
|
||||||
|
|
||||||
|
@Suppress("RemoveExplicitTypeArguments")
|
||||||
internal object PluginDependenciesConfig : ReadOnlyPluginConfig("PluginDependencies") {
|
internal object PluginDependenciesConfig : ReadOnlyPluginConfig("PluginDependencies") {
|
||||||
@ValueDescription("远程仓库, 如无必要无需修改")
|
@ValueDescription("远程仓库, 如无必要无需修改")
|
||||||
val repoLoc by value<String>("https://maven.aliyun.com/repository/public")
|
val repoLoc by value(listOf<String>("https://maven.aliyun.com/repository/public"))
|
||||||
}
|
}
|
@ -99,6 +99,7 @@ internal class BuiltInJvmPluginLoaderImpl(
|
|||||||
ctx.sharedLibrariesLoader.addLib(artifactResult.artifact.file)
|
ctx.sharedLibrariesLoader.addLib(artifactResult.artifact.file)
|
||||||
ctx.sharedLibrariesDependencies.add(artifactResult.artifact.depId())
|
ctx.sharedLibrariesDependencies.add(artifactResult.artifact.depId())
|
||||||
logger.debug { "Linked static shared library: ${artifactResult.artifact}" }
|
logger.debug { "Linked static shared library: ${artifactResult.artifact}" }
|
||||||
|
logger.verbose { "Linked static shared library: ${artifactResult.artifact.file}" }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -16,8 +16,12 @@ import net.mamoe.mirai.utils.MiraiLogger
|
|||||||
import net.mamoe.mirai.utils.debug
|
import net.mamoe.mirai.utils.debug
|
||||||
import net.mamoe.mirai.utils.verbose
|
import net.mamoe.mirai.utils.verbose
|
||||||
import org.apache.maven.repository.internal.MavenRepositorySystemUtils
|
import org.apache.maven.repository.internal.MavenRepositorySystemUtils
|
||||||
|
import org.codehaus.plexus.util.ReaderFactory
|
||||||
|
import org.codehaus.plexus.util.xml.pull.MXParser
|
||||||
|
import org.codehaus.plexus.util.xml.pull.XmlPullParser
|
||||||
import org.eclipse.aether.RepositorySystem
|
import org.eclipse.aether.RepositorySystem
|
||||||
import org.eclipse.aether.RepositorySystemSession
|
import org.eclipse.aether.RepositorySystemSession
|
||||||
|
import org.eclipse.aether.artifact.Artifact
|
||||||
import org.eclipse.aether.artifact.DefaultArtifact
|
import org.eclipse.aether.artifact.DefaultArtifact
|
||||||
import org.eclipse.aether.collection.CollectRequest
|
import org.eclipse.aether.collection.CollectRequest
|
||||||
import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory
|
import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory
|
||||||
@ -25,6 +29,8 @@ import org.eclipse.aether.graph.Dependency
|
|||||||
import org.eclipse.aether.graph.DependencyFilter
|
import org.eclipse.aether.graph.DependencyFilter
|
||||||
import org.eclipse.aether.repository.LocalRepository
|
import org.eclipse.aether.repository.LocalRepository
|
||||||
import org.eclipse.aether.repository.RemoteRepository
|
import org.eclipse.aether.repository.RemoteRepository
|
||||||
|
import org.eclipse.aether.repository.WorkspaceReader
|
||||||
|
import org.eclipse.aether.repository.WorkspaceRepository
|
||||||
import org.eclipse.aether.resolution.DependencyRequest
|
import org.eclipse.aether.resolution.DependencyRequest
|
||||||
import org.eclipse.aether.resolution.DependencyResult
|
import org.eclipse.aether.resolution.DependencyResult
|
||||||
import org.eclipse.aether.spi.connector.RepositoryConnectorFactory
|
import org.eclipse.aether.spi.connector.RepositoryConnectorFactory
|
||||||
@ -33,6 +39,7 @@ import org.eclipse.aether.spi.locator.ServiceLocator
|
|||||||
import org.eclipse.aether.transfer.AbstractTransferListener
|
import org.eclipse.aether.transfer.AbstractTransferListener
|
||||||
import org.eclipse.aether.transfer.TransferEvent
|
import org.eclipse.aether.transfer.TransferEvent
|
||||||
import org.eclipse.aether.transport.http.HttpTransporterFactory
|
import org.eclipse.aether.transport.http.HttpTransporterFactory
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
|
|
||||||
@Suppress("DEPRECATION", "MemberVisibilityCanBePrivate")
|
@Suppress("DEPRECATION", "MemberVisibilityCanBePrivate")
|
||||||
@ -63,6 +70,8 @@ internal class JvmPluginDependencyDownloader(
|
|||||||
"mirai-core-utils",
|
"mirai-core-utils",
|
||||||
"mirai-core-utils-jvm",
|
"mirai-core-utils-jvm",
|
||||||
"mirai-core-utils-android",
|
"mirai-core-utils-android",
|
||||||
|
"mirai-console",
|
||||||
|
"mirai-console-terminal",
|
||||||
)
|
)
|
||||||
) return@DependencyFilter false
|
) return@DependencyFilter false
|
||||||
}
|
}
|
||||||
@ -96,12 +105,99 @@ internal class JvmPluginDependencyDownloader(
|
|||||||
logger.warning(event.exception)
|
logger.warning(event.exception)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
val userHome = System.getProperty("user.home")
|
||||||
|
fun findMavenLocal(): File {
|
||||||
|
val mavenHome = File(userHome, ".m2")
|
||||||
|
fun findFromSettingsXml(): File? {
|
||||||
|
val settings = File(mavenHome, "settings.xml")
|
||||||
|
if (!settings.isFile) return null
|
||||||
|
ReaderFactory.newXmlReader(settings).use { reader ->
|
||||||
|
val parser = MXParser()
|
||||||
|
parser.setInput(reader)
|
||||||
|
|
||||||
|
var eventType = parser.eventType
|
||||||
|
var joinedSettings = false
|
||||||
|
while (eventType != XmlPullParser.END_DOCUMENT) {
|
||||||
|
when (eventType) {
|
||||||
|
XmlPullParser.START_TAG -> {
|
||||||
|
if (!joinedSettings) {
|
||||||
|
if (parser.name != "settings") {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
joinedSettings = true
|
||||||
|
} else {
|
||||||
|
if (parser.name == "localRepository") {
|
||||||
|
val loc = File(parser.nextText())
|
||||||
|
if (loc.isDirectory) return loc
|
||||||
|
return null
|
||||||
|
} else {
|
||||||
|
parser.skipSubTree()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// else -> parser.skipSubTree()
|
||||||
|
}
|
||||||
|
eventType = parser.next()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
return kotlin.runCatching {
|
||||||
|
findFromSettingsXml()
|
||||||
|
}.onFailure { error ->
|
||||||
|
logger.warning(error)
|
||||||
|
}.getOrNull() ?: File(mavenHome, "repository")
|
||||||
|
}
|
||||||
|
|
||||||
|
fun findGradleDepCache(): File {
|
||||||
|
return File(userHome, ".gradle/caches/modules-2/files-2.1")
|
||||||
|
}
|
||||||
|
|
||||||
|
val mavenLocRepo = findMavenLocal()
|
||||||
|
val gradleLocRepo = findGradleDepCache()
|
||||||
|
logger.debug { "Maven local: $mavenLocRepo" }
|
||||||
|
logger.debug { "Gradle cache local: $gradleLocRepo" }
|
||||||
|
session.workspaceReader = object : WorkspaceReader {
|
||||||
|
private val repository: WorkspaceRepository = WorkspaceRepository("default")
|
||||||
|
override fun getRepository(): WorkspaceRepository = repository
|
||||||
|
|
||||||
|
override fun findArtifact(artifact: Artifact): File? {
|
||||||
|
// logger.debug { "Try resolve $artifact" }
|
||||||
|
val path = session.localRepositoryManager.getPathForLocalArtifact(artifact)
|
||||||
|
File(mavenLocRepo, path).takeIf { it.isFile }?.let { return it }
|
||||||
|
val gradleDep = gradleLocRepo
|
||||||
|
.resolve(artifact.groupId)
|
||||||
|
.resolve(artifact.artifactId)
|
||||||
|
.resolve(artifact.baseVersion)
|
||||||
|
if (gradleDep.isDirectory) {
|
||||||
|
val fileName = buildString {
|
||||||
|
append(artifact.artifactId)
|
||||||
|
append('-')
|
||||||
|
append(artifact.baseVersion)
|
||||||
|
artifact.classifier?.takeIf { it.isNotEmpty() }?.let { c ->
|
||||||
|
append('-').append(c)
|
||||||
|
}
|
||||||
|
append('.').append(artifact.extension)
|
||||||
|
}
|
||||||
|
gradleDep.walk().maxDepth(2)
|
||||||
|
.filter { it.isFile }
|
||||||
|
.firstOrNull { it.name == fileName }
|
||||||
|
?.let { return it }
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun findVersions(artifact: Artifact?): MutableList<String> {
|
||||||
|
return mutableListOf()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
session.setReadOnly()
|
session.setReadOnly()
|
||||||
repositories = repository.newResolutionRepositories(
|
repositories = repository.newResolutionRepositories(
|
||||||
session,
|
session,
|
||||||
// listOf(RemoteRepository.Builder("central", "default", "https://repo.maven.apache.org/maven2").build())
|
PluginDependenciesConfig.repoLoc.map { url ->
|
||||||
// listOf(RemoteRepository.Builder("central", "default", "https://maven.aliyun.com/repository/public").build())
|
RemoteRepository.Builder(null, "default", url).build()
|
||||||
listOf(RemoteRepository.Builder("central", "default", PluginDependenciesConfig.repoLoc).build())
|
}
|
||||||
)
|
)
|
||||||
logger.debug { "Remote server: " + PluginDependenciesConfig.repoLoc }
|
logger.debug { "Remote server: " + PluginDependenciesConfig.repoLoc }
|
||||||
}
|
}
|
||||||
@ -115,7 +211,7 @@ internal class JvmPluginDependencyDownloader(
|
|||||||
dependencies.add(dependency)
|
dependencies.add(dependency)
|
||||||
}
|
}
|
||||||
return repository.resolveDependencies(
|
return repository.resolveDependencies(
|
||||||
session as RepositorySystemSession?, DependencyRequest(
|
session, DependencyRequest(
|
||||||
CollectRequest(
|
CollectRequest(
|
||||||
null as Dependency?, dependencies,
|
null as Dependency?, dependencies,
|
||||||
repositories
|
repositories
|
||||||
|
Loading…
Reference in New Issue
Block a user