'da modül bağımlılığı için özel sınıf bir yükleyici kullanıyorum, core
ve third-party
'dan oluşan çok modüllü bir SBT yapısı var. yapıdır kabaca bu:SBT
api
|- core
|- third-party
third-party
için kod api
uygular ve başka bir yerden aynen kopyalanır, bu yüzden gerçekten dokunmak istemiyorum.
third-party
yoldan uygulandığından (singletons'un yoğun kullanımı), core
numaralı telefona third-party
numaralı telefondan bağlanamıyorum. Özellikle, sadece api
aracılığıyla kullanmam gerekiyor, ancak çalışma zamanında third-party
'un birden çok kopyasını almam gerekiyor. (. Bu bana aynı anda birden "singletons" olmasını sağlar)
benim SBT yapı dışında koşuyorum, ben sadece bunu:
def createInstance(): foo.bar.API = {
val loader = new java.net.URLClassLoader("path/to/third-party.jar", parent)
loader.loadClass("foo.bar.Impl").asSubclass(classOf[foo.bar.API]).newInstance()
}
Ama sorun olduğunu ben don sbt core/run
aracılığıyla çalıştırıyorsam ne zaman çalışma zamanında anlamaya karar verdim URLClassLoader
için bir argüman olarak vermeliyim.
1. Projeyi nasıl bir araya getirmeyi düşünüyorsunuz? sbt montaj? Yoksa üçüncü parti.jar harici olacak mı? 2. Üçüncü taraf singletonları nedir? nesne? Senden bahsettiğin için soruyorum çünkü .newInstance() –
@DaleWijnand 1. Henüz karar vermedim, ama belki de 'api', 'çekirdek' ve Scala kütüphanesi ile üçüncü tarafın paketlenmesine izin vereceğim. .jar 'ayrı ayrı. – larsrh
@DaleWijnand 2. Oldukça karmaşıktır. Temel olarak, üçüncü parti kütüphanesi bazı harici işlemleri yönetir. Bu işlemlerin çoğunu bir kerede halledebilir, ancak başlatılması gerekir. Başlatma üzerine, bir nesnenin içindeki bir haritayı (örneğin, bir literal Scala 'nesnesi'), örneğin; dış sürecin yolu. Kodumun bu harici işlemin birden çok yerini ele alabilmesi gerekiyor. – larsrh