Комментарии 22
Помнится если в camel написать URI вида «xxx: что-то-там», то в реестре, например Spring или OSGI, ищется xxx — который может быть настроенным компонентом (и во многих случаях является таковым). Т.е. скажем, если вы просто создадите компонент camel-activemq, то настройкам брокера будет взяться негде.
Ну т.е. тут просто загрузки класса и создания компонента в общем-то не всегда достаточно. Как это устроено?
Ну и как экзотика — просто получить кадр с вебкамеры
new java.net.URL("camel:/webcam:spycam?resolution=HD720").openStream()
Очень интересно! Как я понял, MavenClassLoader по дефолту автоматически загружает все зависимости в один модуль. Если я хочу изолировать некоторые зависимости в отдельные модули, я их загружаю отдельно, а затем использую вариант с parent-ом — зависимости заново загружаться не будут?
forMavenCoordinates(MavenDependency[] dependencies, ClassLoader parent)
а при создании MavenDependency можно указать какие транзитивные зависимости не надо разрешать конкретно в этом загрузчике классов
new MavenDependency(String groupArtifactVersion, Collection<String> excludes)
Интересное решение. Сейчас используем jboss-modules, как альтернативу OSGI. Но несколько напрягает отсутствие нормальной документации.
Хотел уточнить, в mvn-classloader есть ли возможность постоянно проверять и скачивать последний снапшот зависимостей? (попробовал использовать RemoteRepository
и RepositoryPolicy
, но что-то не вышло). И можно ли указать директорию для загружаемых артефактов?
и указать в нем директорию куда сохранять артефакты
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>myrepo</localRepository>
</settings>
Со снепшотами я не работал — не было нужно. Попробую на следующей неделе. Для релизных версий отлично работает LATEST вместо version.
[Dropship WARN] No dropship.properties found! Using .dropship-prefixed system properties (-D)
[Dropship INFO] Starting Dropship v0.0
[Dropship INFO] Requested org.littleshoot:littleproxy:(0,], will load artifact and dependencies for org.littleshoot:littleproxy:(0,].
[Dropship INFO] Collecting maven metadata.
[Dropship INFO] Resolving dependencies.
[Dropship INFO] Downloaded org.littleshoot:littleproxy:1.1.0 (24426 bytes) in 122,000ms (Infinity kbytes/sec).
[Dropship INFO] Downloaded org.sonatype.oss:oss-parent:7 (4824 bytes) in 91,0000ms (Infinity kbytes/sec).
[Dropship INFO] Downloaded com.google.guava:guava:18.0 (5666 bytes) in 88,0000ms (Infinity kbytes/sec).
[Dropship INFO] Downloaded com.google.guava:guava-parent:18.0 (7686 bytes) in 86,0000ms (Infinity kbytes/sec).
[Dropship INFO] Downloaded commons-cli:commons-cli:1.3.1 (10393 bytes) in 89,0000ms (Infinity kbytes/sec).
[Dropship INFO] Downloaded org.apache.commons:commons-parent:37 (63042 bytes) in 147,000ms (Infinity kbytes/sec).
[Dropship INFO] Downloaded org.apache:apache:16 (15397 bytes) in 118,000ms (Infinity kbytes/sec).
[Dropship INFO] Downloaded commons-codec:commons-codec:1.10 (11609 bytes) in 90,0000ms (Infinity kbytes/sec).
[Dropship INFO] Downloaded org.apache.commons:commons-parent:35 (57772 bytes) in 156,000ms (Infinity kbytes/sec).
Попробовал сделать так:
RepositoryPolicy policy = new RepositoryPolicy(true, RepositoryPolicy.UPDATE_POLICY_ALWAYS,
RepositoryPolicy.CHECKSUM_POLICY_WARN);
RemoteRepository repo = new RemoteRepository.Builder("custom", "default", repoUrl)
.setReleasePolicy(policy).setSnapshotPolicy(policy).build();
Так вот при последующем вызове
MavenClassLoader.usingRemoteRepositories(repo).forMavenCoordinates(...)
с суфиксом -SNAPSHOT все работает (т.е. постоянно проверяет и обновляет), а без (релиз полиси) — нет. Странно, ведь полиси одинакова. LATEST и (0,] так же не помогли.
Но в принципе этого уже достаточно.
Забыл уточнить, что в моем примере обновляется существующая версия. Не инкрементируется.
При работе с классами в java, прийдется использовать reflection
Почему? Разве нельзя cast сделать?
(Не удержался)
Хотел сказать спасибо за mvn-classloader. Мне в итоге удалось его применить для изоляции плагинов. Получилось гораздо симпатичнее чем с jboss-modules и не такой оверкилл, как OSGI.
Модуляризация в JavaSE без OSGI и Jigsaw