|
|
|
Как готовить SPI ?
|
|||
|---|---|---|---|
|
#18+
Читаю https://habrahabr.ru/post/118488/ Структура проекта выглядит: в main: ReportRenderer reportRenderer = ReportRenderer.getInstance(); System.out.println(reportRenderer.getClass()); выводится: авторclass my.spi.renderer.ReportRenderer Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: java 1. Автор пишет: авторПоместим в META-INF/services/com.example.ReportRenderer следующее: com.example.FileReportRenderer Чего-то я не понял куда мне конкретно это поместить. У меня нет никакого джарника. Как это связано с jdbc? в jdbc в META-INF не надо создавать никаких новых файлов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 15:22 |
|
||
|
Как готовить SPI ?
|
|||
|---|---|---|---|
|
#18+
questionerЧего-то я не понял куда мне конкретно это поместить. У меня нет никакого джарника. А у Java нет никакой IntelliJ IDEA и никаких проектов. Зато есть jar-ники. questionerКак это связано с jdbc? в jdbc в META-INF не надо создавать никаких новых файлов. Ты давно драйверы для JDBC писал? mysql-connector-java-5.1.16-bin.jar\META-INF\services\java.sql.Driver ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 15:35 |
|
||
|
Как готовить SPI ?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, BlazkowiczА у Java нет никакой IntelliJ IDEA и никаких проектов. Зато есть jar-ники. Просто собрать любым способом джарник? авторТы давно драйверы для JDBC писал? не приходилось Blazkowiczmysql-connector-java-5.1.16-bin.jar\META-INF\services\java.sql.Driver запутался. JDBC это API для работы с базой данных. JDBC коннектор - вот честно не знаю, но мы подключаем именно её, когда нам надо подключить my sql driver. Где тут вообще расширение функционала? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 15:44 |
|
||
|
Как готовить SPI ?
|
|||
|---|---|---|---|
|
#18+
questionerBlazkowiczА у Java нет никакой IntelliJ IDEA и никаких проектов. Зато есть jar-ники. Просто собрать любым способом джарник? Да. Возможно, получится в IDEA сконфигурировать артифакт и подсунуть ему META-INF каталог в качестве ресурса. Реальные проекты мы же таки из jar-ников запускаем, а не из IDE? questionerне приходилось Но при этом есть твердая уверенность что в JDBC никакого SPI нет. questionerзапутался. Бывает. questionerJDBC это API для работы с базой данных. Хоть здесь без заблуждений. questionerJDBC коннектор - вот честно не знаю, но мы подключаем именно её, когда нам надо подключить my sql driver. Опять всё напутал. :) JDBC драйвер для MySQL называется mysql connector. questionerГде тут вообще расширение функционала? Эээ. Какой-то риторический вопрос. Даже не знаю как на него серьезно ответить. Вот JSE не умеет работать с MySQL. Добавляем драйвер и вот - "расширение функционала". Теперь-то умеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 15:57 |
|
||
|
Как готовить SPI ?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, добавил в гредл Код: java 1. 2. 3. 4. 5. сделал Код: java 1. нашёл jar в папке авторD:\work\SPI_test\build\libs Разархивировал его 7zip, в папку META-INF положил файл с именем Код: java 1. в контенте файла написал: авторmy.spi.renderer.FileReportRender заархивировал вновь как .zip и переименовал как .jar пытаюсь запустить: авторD:\work\SPI_test\build\libs>java -jar SPI_test_copy_changed.jar Error: Invalid or corrupt jarfile SPI_test_copy_changed.jar D:\work\SPI_test\build\libs> Что я делаю не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 16:12 |
|
||
|
Как готовить SPI ?
|
|||
|---|---|---|---|
|
#18+
Проблема была в том, что архиватор всю папку заархивировал, а надо только её контент. теперь запустилось: D:\work\SPI_test\build\libs>java -jar SPI_test_copy_changed.jar class my.spi.renderer.ReportRenderer но результат то старый ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 16:22 |
|
||
|
Как готовить SPI ?
|
|||
|---|---|---|---|
|
#18+
jar это не обычный zip. Манифест jar-а должен быть первой сущностью zip-а. Обычные архиваторы это не учитывают. Создайте файлы как ресурсы проекта и пропишити в вашем скрипте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 16:24 |
|
||
|
Как готовить SPI ?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczjar это не обычный zip. Манифест jar-а должен быть первой сущностью zip-а. Обычные архиваторы это не учитывают. Создайте файлы как ресурсы проекта и пропишити в вашем скрипте. Что такое первая сущность? Могли бы подетальнее, пожалуйста. Как Вы уже поняли у меня idea + gradle что Вы называете скриптом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 16:56 |
|
||
|
Как готовить SPI ?
|
|||
|---|---|---|---|
|
#18+
questionerЧто такое первая сущность? Старость не радость. Entry же не Entity: https://docs.oracle.com/javase/7/docs/api/java/util/zip/ZipEntry.html questionerчто Вы называете скриптом? Скрипт сборки проекта: https://docs.gradle.org/current/userguide/writing_build_scripts.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 16:59 |
|
||
|
Как готовить SPI ?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, ок) BlazkowiczСоздайте файлы как ресурсы проекта Научите? и вообще про какие файлы речь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 17:09 |
|
||
|
Как готовить SPI ?
|
|||
|---|---|---|---|
|
#18+
questioner, По ссылке META-INF/services упомянуто 9 раз. Как можно было пропустить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 17:20 |
|
||
|
Как готовить SPI ?
|
|||
|---|---|---|---|
|
#18+
Понял. забыл добавить services в папке META-INF. Теперь заработало. авторD:\work\SPI_test\build\libs>java -jar SPI_test.jar class my.spi.renderer.FileReportRenderer ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 17:21 |
|
||
|
Как готовить SPI ?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczquestioner, По ссылке META-INF/services упомянуто 9 раз. Как можно было пропустить? Наверное BlazkowiczСтарость не радость. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 17:23 |
|
||
|
Как готовить SPI ?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Ок, стало понятно как это завести. Не стало понятнее зачем это надо. Вот в jdbc драйвере это зачем? Это такой функционал подменяемости? java.sql.Drive r: Код: java 1. 2. 3. 4. 5. 6. 7. Внутри mySql коннектора где-то написано?: Код: java 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2017, 17:38 |
|
||
|
Как готовить SPI ?
|
|||
|---|---|---|---|
|
#18+
нашёл. java.sql.DriverManager, который есть часть JDK имеет метод loadInitialDrivers Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. То есть сначала ищем имя драйвера в системной переменной jdbc.drivers а здесь делаем Class.forName: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. В этом куске просто грузим сервисы и гуляем итератором по ним. Гуляем чтобы класс лоадер в память загрузил класс? то же самое, что class.forName ? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2017, 11:58 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39538797&tid=2122520]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
141ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 416ms |

| 0 / 0 |
