После компиляции исходного кода (анонимный) класс, созданный линией:
new GenericEntity>(list) {}
использует переменную типа для ссылки на ее родительскую. Поскольку переменные типа не имеют значения во время выполнения, вы не можете использовать генерики, подобные этому. Вы вынуждены передавать так называемый токен типа из вызывающего сайта. Это пример, который требует, чтобы токен передавался от вызывающего абонента findAll()
, но вы могли потребовать его в конструкторе и сохранить его в переменной экземпляра:
public abstract class GenericDataResource {
public Response findAll(GenericEntity> token) {
Query query = em.createNamedQuery(modelClass.getSimpleName() + ".findAll");
List list = query.getResultList();
return Response.ok(token).build();
}
}
отправьте токен, как
new GenericEntity>() {}
Если вы используете только непараметрированные подклассы, findAll()
может воспользоваться отражением для создания токена (непроверенный, надеюсь, что вы получите эту идею):
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response findAll() {
Query query = em.createNamedQuery(modelClass.getSimpleName()+".findAll");
List list = query.getResultList();
return Response.ok(new GenericEntity(list, getType())).build();
}
Вы должны реализовать getType()
, чтобы вернуть желаемый тип. Это будет подкласс ParameterizedType
, способный обозначать тип List
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Работал для меня. Все аналогичные не сделали.
На Mac Sierra, если вы используете Homebrew, выполните:
sudo ln -s /usr/local/Cellar/mysql@5.6/5.6.34/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Для MySql 5.6, установленного из DMG на Mavericks
sudo ln -s /usr/local/mysql-5.6.14-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
используйте это из командной строки:
sudo install_name_tool -id /usr/local/mysql-connector-c-6.1.3-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/local/mysql-connector-c-6.1.3-osx10.7-x86_64/lib/libmysqlclient.18.dylib
попробовал несколько компьютеров, где maverick всегда работает
Единственное, что сработало для меня, это:
sudo install_name_tool -change libmysqlclient.18.dylib \
/usr/local/mysql-5.6.23-osx10.8-x86_64/lib/libmysqlclient.18.dylib \
/Library/Ruby/Gems/2.0.0/gems/mysql2-0.4.3/lib/mysql2/mysql2.bundle
Заменить пути mysql и драгоценных камней в соответствии с вашей системой.
Я работал с командой rails g model, и я получил эту ошибку:
Library not loaded: libmysqlclient.18.dylib
Я пробовал это, и он функционировал для меня. Я использовал Mavericks 10.9.5
sudo ln -s /usr/local/mysql-5.6.19-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Спасибо!
Теперь я использую Yosemite 10.10.5, и у меня такая же ошибка, поэтому я просто запустил эту команду на терминал и он был успешно исправлен.
$ sudo ln -s /usr/local/mysql-5.6.26-osx10.8-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
также вы можете попробовать:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Оба они отлично работают для меня. Надеюсь, это может быть полезно!
Если вы используете MySQL, установленный с HomeBrew в El Capitan, вы должны связать его следующим образом:
sudo ln -sf /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
gem uninstall -aIx
и
bundle install
работали для меня.
У меня возникла проблема «Библиотека не загружена: libmysqlclient.18.dylib» при импорте MySQLdb из MySQL Для python3 :
Traceback (most recent call last):
File "test.py", line 3, in <module>
import MySQLdb
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/MySQLdb/__init__.py", line 19, in <module>
import _mysql
ImportError: dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/_mysql.cpython-35m-darwin.so, 2): Library not loaded: libmysqlclient.18.dylib
Referenced from: /opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/_mysql.cpython-35m-darwin.so
Reason: image not found
Решение работает для меня: Mac OS X 10.11.1 Python3.5
Edit ~/.bash_profile:
export PATH="/opt/local/Library/Frameworks/Python.framework/Versions/3.5/bin:$PATH"
export PATH="/opt/local/bin:/opt/local/sbin:$PATH"
export PATH="/usr/local/mysql/bin:$PATH"
export PATH="/usr/local/mysql/lib:$PATH"
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Хотя название этого вопроса описывает именно ту проблему, с которой я столкнулся, обстоятельства отличаются от описанных в предыдущих ответах, а также было решением.
В моем случае (El Capitan, mysql установлен через homebrew), brew update && brew upgrade
вызвало обновление пакета mysql до 5.7.10 (из 5.6.x).
Обновление вызвало libmysqlclient.18.dylib
для замены на libmysqlclient.20.dylib
, но mysql2
gem все еще полагался на первый.
Чтобы устранить проблему, я сделал: gem uninstall mysql2 && gem install mysql2
Обратите внимание, что подобные проблемы могут возникать в разных библиотеках, управляемых доморощенным ( см. мой собственный ответ на это, например )
Чтобы убедиться, какая символическая ссылка необходима (зависит от версии mysql и версии os):
$ locate libmysqlclient.18.dylib
/usr/local/mysql-5.6.24-osx10.8-x86_64/lib/libmysqlclient.18.dylib
и так:
ln -s /usr/local/mysql-5.6.24-osx10.8-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Я использую Rails REE (2.3.4) для унаследованной системы. После обновления до El Capitan запуск скрипта / консоли приводил к ошибке, и мое приложение больше не запускалось (используя pow):
$ script/console
Loading development environment (Rails 2.3.4)
/blah-blah/gems/activerecord-2.3.4/lib/active_record/connection_adapters/abstract/connection_specification.rb:76:in establish_connection:RuntimeError: Please install the mysql2 adapter: gem install activerecord-mysql2-adapter (dlopen(/blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib
Referenced from: /blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle
Reason: image not found - /blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle)
Из этой самой темы, выше, я решил, что мне нужно было это сделать команда в терминале: sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Эта команда вызвала ошибку: «ln: /usr/lib/libmysqlclient.18.dylib: операция не разрешена». Я никогда не видел эту ошибку раньше.
После довольно много рытья я нашел эту статью: http://www.macworld.com/article/2986118/security/how-to- modify-system-integrity-protection-in-el-capitan.html и следуйте инструкциям, чтобы отключить SIP (новую защиту целостности El Capitan). После отключения SIP и после перезагрузки команда ln работала нормально. Затем я отключил SIP. Теперь все в порядке. Мое приложение снова запускается с использованием pow и без ошибок запускает скрипт / консоль. Надеюсь, это поможет вам.
Если вы используете Bitnami RubyStack и столкнулись с подобной проблемой. Попробуйте этот
sudo ln -s /Applications/rubystack-2.0.0-17/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Я подтверждаю патч от Abhishek работает .
тоже работает для Yosemite.
note: вместо ссылки на конкретную версию mysql , используйте тот факт, что mysql уже создал символическую ссылку:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
это решение действительно работает для Xcode и C API.
Моя проблема с загрузкой этого файла пакета была плохой символической ссылкой. Поэтому проверьте ссылку и при необходимости замените ее на новую. В этот момент все встало на свои места. Не знаю, как это произошло, но так оно и было. Первый раз, когда произошла синтаксическая ошибка.
Я столкнулся с этой проблемой после полного удаления и последующей установки MySQL. В частности:
Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.20.dylib
Я даже не коснулся моего приложения Rails.
Переустановка mysql2
gem решила эту проблему.
$ gem uninstall mysql2
$ gem install mysql2 -v 0.3.18 # (specifying the version found in my Gemfile.lock)
[MySQL 5.7.10, Rails 4.0.0, Ruby 2.0.0, Mac OS X Yosemite 10.10]
Это работает для меня:
ln -s /usr/local/Cellar/mysql/5.6.22/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
– treejanitor
25 September 2016 в 19:13
Для тех, кто использует варево. Просто свяжите версию mysql с опцией «--force».
brew link mysql56 --force
В El Capitan я получил ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted
В El Capitan /usr/lib/
теперь есть ограниченный флаг и не может быть записано без отключения безопасности, поэтому я просто поставлю ссылку в /usr/local/lib
вместо .
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Сервер Rails снова работает отлично.
После множества поисковых запросов и попыток все выше ... Единственное, что решило мою проблему, это команда:
$install_name_tool -id /usr/local/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Я использую macbook pro, OSX 10 El Capitan. Дарвин xxxx-MacBook-Pro.local 15.6.0 Ядро Дарвина Версии 15.6.0: Чт 23 июня 18:25:34 PDT 2016; XXX: xnu-3248.60.10 ~ 1 / RELEASE_X86_64 x86_64 Perl: v5.18.2 Mysql: 5.6.19
.bash_profile
действительно не применяется. – maksimov 12 January 2013 в 02:58usr/lib
, но символическая ссылка наusr/local/lib
будет работать:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
– JonathanSimmons 14 September 2015 в 16:44