SlideShare a Scribd company logo
1 of 13
ライブラリの依存関係で困ったとき
にやってみたことLT
hiraiva @ Scala 関西 Summit 2016/10/08
あんた誰?
 平岩二郎 / @hiraiva
 株式会社オプト勤務エンジニア兼アドテクおじさん(自称)
 大学時代は関西でした!(露骨な迎合アピール)
 株式会社オプト
 東京のインターネット広告代理店
 Scala関西サミット Silverスポンサー
 チラシにだいたい言いたいこと書いたので見たってや〜
 株式会社オプト 大阪支社
 堂島エリアにあります
 セールス、マーケティングコンサルタント募集中!
 (開発室はありません)
eviction warnings
eviction warnings
 sbt compile 時にこういう warning が出たら…
 sbt 0.13.6 以降の eviction warning
 同じライブラリの複数バージョンへの依存が見つかった
ので、sbt が推論によりどちらかを追い出し(eviction)した
よという warning
 何もしなくてもコンパイルできた!やったね!
(解決したとは言ってない)
[warn] There may be incompatibilities among your library dependencies.
[warn] Here are some of the libraries that were evicted:
[warn] * com.typesafe.play:twirl-api_2.11:1.0.2 -> 1.1.1
[warn] Run 'evicted' to see detailed eviction warnings
sbt-assembly利用時
Merge Strategy
 assembleするときにファイルが重複すると怒られる
 fat jar 内のパスを指定し、
どのような戦略でファイルを採用するか指定する
 依存関係によりぶつかっているパスだけ指定すれば良い
 依存の解決以外にもファイルをマージしたりなどできる
 assembleできるようになった!やったね!
(解決したとは言ってない)
Project(name, file(path.getOrElse(name)))
.settings(
sbt.Keys.test in assembly := {},
mainClass in assembly := MyMainClass,
assemblyMergeStrategy in assembly := {
case PathList("META-INF", "io.netty.versions.properties") => MergeStrategy.last
case "application.conf" | "production.conf" | "staging.conf" => MergeStrategy.concat
}
)
完
コンパイルできても
実は内部APIが
incompatibleだったら…
実行時例外が発生する
Google Cloud for Java
が
Play 2.5 と
コンフリクトする?
GCP for Java 入りの Play 2.5 アプリ
 アクセス時に上記のような実行時例外が出る
 Play2.5は最新のNettyなのに対し、GCP for Java(が依存してい
るgrpc)が古いNettyに依存してるからっぽい
 (2016/11/2修正)正しくはplay2.5がNetty4.0系で、GCP4J(が依存してい
るgrpc)がNetty4.1系に依存していました。(Playの方が古い)
 似た事例はあるっぽいがよくわかりませんでした
http://stackoverflow.com/questions/35827782/conflict-between-play-framework-2-5-and-grpc-0-13
 結局、Playを2.4系にダウングレードして(一時的)解決
[error] p.c.s.n.PlayRequestHandler - Exception caught in Netty
java.lang.AbstractMethodError: null
at io.netty.util.ReferenceCountUtil.touch(ReferenceCountUtil.java:73)
at io.netty.channel.DefaultChannelPipeline.touch(DefaultChannelPipeline.java:107)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:331
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:326)
at com.typesafe.netty.http.HttpStreamsHandler.channelRead(HttpStreamsHandler.java:129)
at com.typesafe.netty.http.HttpStreamsServerHandler.channelRead(HttpStreamsServerHandler.java:96)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:334
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:326)
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
ライブラリの依存関係が
コンフリクトした場合に
僕たちができること
バージョンを変える
OR
プルリクを送る
【未承諾広告※】
株式会社オプトのエンジニア組織 Opt Technologies では
Scalaに興味のあるエンジニアを募(中略)
Scalaでやろうぜ!!
ご清聴ありがとうございました

More Related Content

Viewers also liked

地方発信のソーシャルメディア
地方発信のソーシャルメディア地方発信のソーシャルメディア
地方発信のソーシャルメディア
SkunkWork.Co.,Ltd
 
อาร์ม รูปโมลานิซ่า
อาร์ม  รูปโมลานิซ่าอาร์ม  รูปโมลานิซ่า
อาร์ม รูปโมลานิซ่า
Mos BirDy
 
Online Marketing Audit
Online Marketing AuditOnline Marketing Audit
Online Marketing Audit
Mark Brewerton
 

Viewers also liked (13)

大きい組織におけるPmとその育成についてふわっとした相談をするlt
大きい組織におけるPmとその育成についてふわっとした相談をするlt大きい組織におけるPmとその育成についてふわっとした相談をするlt
大きい組織におけるPmとその育成についてふわっとした相談をするlt
 
将軍と大名、どうして差がついたのか…慢心、環境の違いLt
将軍と大名、どうして差がついたのか…慢心、環境の違いLt将軍と大名、どうして差がついたのか…慢心、環境の違いLt
将軍と大名、どうして差がついたのか…慢心、環境の違いLt
 
Sbtのマルチプロジェクトはいいぞ
SbtのマルチプロジェクトはいいぞSbtのマルチプロジェクトはいいぞ
Sbtのマルチプロジェクトはいいぞ
 
インターンシップの学生にお届けしようとしたScalaの文法(初級編)
インターンシップの学生にお届けしようとしたScalaの文法(初級編)インターンシップの学生にお届けしようとしたScalaの文法(初級編)
インターンシップの学生にお届けしようとしたScalaの文法(初級編)
 
地方発信のソーシャルメディア
地方発信のソーシャルメディア地方発信のソーシャルメディア
地方発信のソーシャルメディア
 
Xіv. магічні артефакти
Xіv. магічні артефактиXіv. магічні артефакти
Xіv. магічні артефакти
 
Xzu by ramy xzu originaloe copy.doc2
Xzu by ramy xzu originaloe   copy.doc2Xzu by ramy xzu originaloe   copy.doc2
Xzu by ramy xzu originaloe copy.doc2
 
8 Reasons Twitter Still Lags Behind Facebook
8 Reasons Twitter Still Lags Behind Facebook8 Reasons Twitter Still Lags Behind Facebook
8 Reasons Twitter Still Lags Behind Facebook
 
อาร์ม รูปโมลานิซ่า
อาร์ม  รูปโมลานิซ่าอาร์ม  รูปโมลานิซ่า
อาร์ม รูปโมลานิซ่า
 
Comic!
Comic!Comic!
Comic!
 
Online Marketing Audit
Online Marketing AuditOnline Marketing Audit
Online Marketing Audit
 
What are the great predictors of future performance and how to recruit for th...
What are the great predictors of future performance and how to recruit for th...What are the great predictors of future performance and how to recruit for th...
What are the great predictors of future performance and how to recruit for th...
 
Accsell008
Accsell008Accsell008
Accsell008
 

Similar to ライブラリの依存関係で困ったときにやってみたことLt

クリックしないリンクリゾルバの作り方
クリックしないリンクリゾルバの作り方クリックしないリンクリゾルバの作り方
クリックしないリンクリゾルバの作り方
Yutaka HAYASHI
 

Similar to ライブラリの依存関係で困ったときにやってみたことLt (20)

AWS サーバーレス開発用ローカルシミュレータを作った話
AWS サーバーレス開発用ローカルシミュレータを作った話AWS サーバーレス開発用ローカルシミュレータを作った話
AWS サーバーレス開発用ローカルシミュレータを作った話
 
Owasp top10 2017 a4 xxe
Owasp top10 2017 a4 xxeOwasp top10 2017 a4 xxe
Owasp top10 2017 a4 xxe
 
TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。
 
フロントエンドというカオスな世界について
フロントエンドというカオスな世界についてフロントエンドというカオスな世界について
フロントエンドというカオスな世界について
 
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
 
Archer
ArcherArcher
Archer
 
Rancher select
Rancher selectRancher select
Rancher select
 
サイボウズがre:Inventに参加した話し。
サイボウズがre:Inventに参加した話し。サイボウズがre:Inventに参加した話し。
サイボウズがre:Inventに参加した話し。
 
Delphi開発者のためのSencha入門
Delphi開発者のためのSencha入門Delphi開発者のためのSencha入門
Delphi開発者のためのSencha入門
 
LambdaでBilling Alertを拡張してみた
LambdaでBilling Alertを拡張してみたLambdaでBilling Alertを拡張してみた
LambdaでBilling Alertを拡張してみた
 
ヤマムギVol.1 Opening
ヤマムギVol.1 OpeningヤマムギVol.1 Opening
ヤマムギVol.1 Opening
 
WordBench京都9月号
WordBench京都9月号WordBench京都9月号
WordBench京都9月号
 
WorcCamp Kansai 2015 LT大会
WorcCamp Kansai 2015 LT大会WorcCamp Kansai 2015 LT大会
WorcCamp Kansai 2015 LT大会
 
Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -
 
アニメの公式アカウントのフォロワー数をつぶやくTwitterボットを作ってみた
アニメの公式アカウントのフォロワー数をつぶやくTwitterボットを作ってみたアニメの公式アカウントのフォロワー数をつぶやくTwitterボットを作ってみた
アニメの公式アカウントのフォロワー数をつぶやくTwitterボットを作ってみた
 
クリックしないリンクリゾルバの作り方
クリックしないリンクリゾルバの作り方クリックしないリンクリゾルバの作り方
クリックしないリンクリゾルバの作り方
 
Rancherカタログ紹介 Hadoop + Yarn
Rancherカタログ紹介 Hadoop + YarnRancherカタログ紹介 Hadoop + Yarn
Rancherカタログ紹介 Hadoop + Yarn
 
Introduction of Leap Motion
Introduction of Leap MotionIntroduction of Leap Motion
Introduction of Leap Motion
 
APIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjpAPIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjp
 
LINEとAWS(Lambda,Step Functions,API Gateway)とTwilioとkintoneでBOTを作ってみるハンズオン(yam...
LINEとAWS(Lambda,Step Functions,API Gateway)とTwilioとkintoneでBOTを作ってみるハンズオン(yam...LINEとAWS(Lambda,Step Functions,API Gateway)とTwilioとkintoneでBOTを作ってみるハンズオン(yam...
LINEとAWS(Lambda,Step Functions,API Gateway)とTwilioとkintoneでBOTを作ってみるハンズオン(yam...
 

Recently uploaded

Recently uploaded (11)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

ライブラリの依存関係で困ったときにやってみたことLt

  • 2. あんた誰?  平岩二郎 / @hiraiva  株式会社オプト勤務エンジニア兼アドテクおじさん(自称)  大学時代は関西でした!(露骨な迎合アピール)  株式会社オプト  東京のインターネット広告代理店  Scala関西サミット Silverスポンサー  チラシにだいたい言いたいこと書いたので見たってや〜  株式会社オプト 大阪支社  堂島エリアにあります  セールス、マーケティングコンサルタント募集中!  (開発室はありません)
  • 4. eviction warnings  sbt compile 時にこういう warning が出たら…  sbt 0.13.6 以降の eviction warning  同じライブラリの複数バージョンへの依存が見つかった ので、sbt が推論によりどちらかを追い出し(eviction)した よという warning  何もしなくてもコンパイルできた!やったね! (解決したとは言ってない) [warn] There may be incompatibilities among your library dependencies. [warn] Here are some of the libraries that were evicted: [warn] * com.typesafe.play:twirl-api_2.11:1.0.2 -> 1.1.1 [warn] Run 'evicted' to see detailed eviction warnings
  • 6. Merge Strategy  assembleするときにファイルが重複すると怒られる  fat jar 内のパスを指定し、 どのような戦略でファイルを採用するか指定する  依存関係によりぶつかっているパスだけ指定すれば良い  依存の解決以外にもファイルをマージしたりなどできる  assembleできるようになった!やったね! (解決したとは言ってない) Project(name, file(path.getOrElse(name))) .settings( sbt.Keys.test in assembly := {}, mainClass in assembly := MyMainClass, assemblyMergeStrategy in assembly := { case PathList("META-INF", "io.netty.versions.properties") => MergeStrategy.last case "application.conf" | "production.conf" | "staging.conf" => MergeStrategy.concat } )
  • 7.
  • 9. Google Cloud for Java が Play 2.5 と コンフリクトする?
  • 10. GCP for Java 入りの Play 2.5 アプリ  アクセス時に上記のような実行時例外が出る  Play2.5は最新のNettyなのに対し、GCP for Java(が依存してい るgrpc)が古いNettyに依存してるからっぽい  (2016/11/2修正)正しくはplay2.5がNetty4.0系で、GCP4J(が依存してい るgrpc)がNetty4.1系に依存していました。(Playの方が古い)  似た事例はあるっぽいがよくわかりませんでした http://stackoverflow.com/questions/35827782/conflict-between-play-framework-2-5-and-grpc-0-13  結局、Playを2.4系にダウングレードして(一時的)解決 [error] p.c.s.n.PlayRequestHandler - Exception caught in Netty java.lang.AbstractMethodError: null at io.netty.util.ReferenceCountUtil.touch(ReferenceCountUtil.java:73) at io.netty.channel.DefaultChannelPipeline.touch(DefaultChannelPipeline.java:107) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:331 at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:326) at com.typesafe.netty.http.HttpStreamsHandler.channelRead(HttpStreamsHandler.java:129) at com.typesafe.netty.http.HttpStreamsServerHandler.channelRead(HttpStreamsServerHandler.java:96) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348 at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:334 at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:326) at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
  • 13. 【未承諾広告※】 株式会社オプトのエンジニア組織 Opt Technologies では Scalaに興味のあるエンジニアを募(中略) Scalaでやろうぜ!! ご清聴ありがとうございました