Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Maven central repository ͷ artifact ΛϥϯΩϯά͢Δ ौ୩Java #20 2017-09-30 KOMIYA Atsushi
Slide 2
Slide 2 text
@komiya_atsushi
Slide 3
Slide 3 text
No content
Slide 4
Slide 4 text
Today’s topic
Slide 5
Slide 5 text
ΈΜͳ ͍͖ͩ͢ Maven central repository ͷ artifact ΛϥϯΩϯάͯ͠ΈΔ
Slide 6
Slide 6 text
Artifact ΛϥϯΩϯά͢Δ • Maven central repository ্ͷ artifact (όʔδϣϯҧ͍Λআ͍ͯ) 20 ສҎ্ଘࡏ͢Δ • ΞϓϦέʔγϣϯʹΈࠐΉϥΠϒϥϦΛબఆ ͢Δࡍɺར༻࣮ͷ͋ΔϥΠϒϥϦΛબͼ͍ͨ • ͍ͷʹר͔Εͯੜ͖͍͖͍ͯͨੑ • Artifact ʹର͢ΔϥϯΩϯά͕ཉ͍͠ʂ
Slide 7
Slide 7 text
http://search.maven.org/#stats
Slide 8
Slide 8 text
Ͳ͏ͬͯ artifact Λ ϥϯΩϯά͢Δͷ͔ʁ
Slide 9
Slide 9 text
Artifact ͷґଘؔʹண͢Δ • ʮ͞·͟·ͳ artifact ʹґଘ͞Ε͍ͯΔ artifact ΄ Ͳɺॏཁͳ artifact Ͱ͋Δʯͱ͍͏ԾઆΛߟ͑Δ • Artifact ͝ͱͷʮඃࢀরʯ Λࢦඪͱ͢Δํ๏͕ ߟ͑ΒΕΔ • จͷʮඃҾ༻ʯతͳߟ͑ํ • ୯७ͳʮඃࢀরʯΑΓΑ͍ࢦඪͳ͍͔ʁ
Slide 10
Slide 10 text
No content
Slide 11
Slide 11 text
ґଘؔ ༗άϥϑͰ දݱͰ͖Δ
Slide 12
Slide 12 text
PageRank !
Slide 13
Slide 13 text
PageRank • Google ͷΞϨ • Web ϖʔδͷϦϯΫ͔ؔΒϖʔδͷॏཁΛଌఆ • ϦϯΫؔ༗άϥϑͱͯ͠දݱͰ͖Δ • Artifact ಉ࢜ͷґଘؔΛ༗άϥϑͰදݱ͢Δ • ϊʔυ: artifactɺΤοδ: ґଘؔ • Τοδґଘ͍ͯ͠Δ → ґଘ͞Ε͍ͯΔɺͷ͖ • είΞ͕ߴ͍ artifact ΄ͲɺॏཁͰ͋ΔͱղऍͰ͖Δ
Slide 14
Slide 14 text
Maven central repository ͷ σʔλΛऩू͢Δ
Slide 15
Slide 15 text
Ͳ͏ͬͯऩू͢Δʁ • https://repo1.maven.org/maven2/ ͔Βɺͯ͢ͷ POM ϑΝΠϧΛͻͨ͢ΒΫϩʔϧ͢Δʁ • όʔδϣϯҧ͍ࠐΈͰ artifact ૯ 200 ສҎ্… • ࠷৽όʔδϣϯͷ POM ͚ͩμϯϩʔυ͍ͨ͠ • ͔͠͠ɺͲͷ artifact ͕࠷৽όʔδϣϯͳͷ͔Λ (จࣈྻͷ) όʔδϣϯใ͔Βఆ͢Δͷ໘
Slide 16
Slide 16 text
Index ϑΝΠϧΛར༻͢Δ • ࣮ central repository ্ͷͯ͢ͷόʔδϣϯͷ artifact ΛؚΜͩ index ϑΝΠϧ͕ఏڙ͞Ε͍ͯΔ • https://maven.apache.org/repository/central- index.html • .properties ϑΝΠϧͱ gzip ѹॖ͞ΕͨϑΝΠϧ (300 MB ) ͷೋͭͰߏ͞Ε͍ͯΔ • Weekly Ͱߋ৽͞Ε͍ͯΔ
Slide 17
Slide 17 text
Index ϑΝΠϧͰಘΒΕΔ / ಘΒΕͳ͍ใ • Index ϑΝΠϧ͔ΒಘΒΕΔใ (Ұ෦) • Group ID • Artifact ID • όʔδϣϯ • Classifier (sources / javadoc / linux-x86_64 ͱ͔ͷΞϨ) • Artifact ͷϑΝΠϧͷ࠷ऴߋ৽࣌ • ͜ΕͰ࠷৽όʔδϣϯͷ artifact ΛѲͰ͖Δͣ • Index ϑΝΠϧ͔ΒಘΒΕͳ͍ใ • Artifact ಉ࢜ͷґଘؔ
Slide 18
Slide 18 text
Index ϑΝΠϧͷࠪ • indexer-reader Λར༻͢Δ • group: 'org.apache.maven.indexer' • name: 'indexer-reader' • ۩ମతͳར༻ํ๏ҎԼ URL ͷ࣮Λࢀর • http://bit.ly/maven-indexer-demo
Slide 19
Slide 19 text
Artifact ಉ࢜ͷґଘؔ • Maven central repository ্ͷ POM ϑΝΠϧΛ ࢀর͢ΔҎ֎ʹख͕ͳ͍ͬΆ͍ • ํͳ͍ͷͰɺͻͨ͢ΒྗٕͰΫϩʔϧ • ֤ Artifact ͷ࠷৽όʔδϣϯʹݶఆ͢Εɺ ଟগϚγʹͳΔ • ͦΕͰ 20 ສҎ্͚ͩͲ…
Slide 20
Slide 20 text
POM ϑΝΠϧͷಡΈࠐΈ • maven-model Λར༻͢Δ • group: 'org.apache.maven' • name: 'maven-model' public static void demo() throws Exception { try (InputStream in = new FileInputStream("path/to/pom.xml")) { Model model = new MavenXpp3Reader().read(in); // ґଘ͕ؔऔಘͰ͖Δ List dependencies = model.getDependencies(); } }
Slide 21
Slide 21 text
PageRank Λܭࢉ͢Δ
Slide 22
Slide 22 text
ࣗલ࣮ʁ ൱ʂ
Slide 23
Slide 23 text
Apache Spark / GraphX Λ͏ • GraphX • Spark ্ͰάϥϑΛѻ͍ɺܭࢉ͢ΔͨΊͷ API Λఏڙ͢Δ • PageRank ͕͠Εͬͱ࣮͞Ε͍ͯΔ ❤ • άϥϑͷنతʹɺLocal mode ͰܭࢉՄೳ
Slide 24
Slide 24 text
Apache Spark / GraphX Λ͏ def run(sc: SparkContext): Unit = { // දݱ͞Εͨ 2 ͭͷ artifact Λεϖʔε۠ΓͰฒͯґଘؔΛදͨ͠ϑΝΠϧ val graph = GraphLoader.edgeListFile(sc, "path/to/dependency-graph.txt") // PageRank Λܭࢉ͢Δ val ranking = graph.pageRank(0.0001).vertices // Artifact ͷදݱ͔Β GAV (groupId|artifactId|version) ͷϚοϐϯά val artifacts = sc.textFile("path/to/artifacts.txt").map { line => val values = line.split(",") (values(0).toLong, values(1)) } // Artifact ͷදݱΛ GAV ʹஔ͖͑ͯϑΝΠϧʹॻ͖ग़͢ artifacts.join(ranking).map { case (id, (gav, rank)) => (gav, rank) } .sortBy(_._2, ascending = false) .map(t => t._1 + "," + t._2) .saveAsTextFile("path/to/result") }
Slide 25
Slide 25 text
ґଘؔͷάϥϑ • Maven ͷґଘؔʹʮείʔϓʯ͕͋Δ • compile, provided, runtime, test, system, import • ҎԼͷείʔϓ (ͷΈ߹Θͤ) ͝ͱʹ PageRank Λܭࢉ͢Δ • ͯ͢ • compile • test • ͯ͢ (ґଘ͞Ε͍ͯΔ → ґଘ͍ͯ͠Δɺͷٯ͖)
Slide 26
Slide 26 text
࣮ࡍʹϥϯΩϯάΛݟͯΈΑ͏
Slide 27
Slide 27 text
ϥϯΩϯά݁Ռʹ͍ͭͯ • Top 10 ͘͠ Top 20 ʹߜͬͯ͝հ • Top 100 ·Ͱͷ݁ՌҎԼʹܝࡌ (Google εϓϨουγʔτ) • http://bit.ly/PackageRank
Slide 28
Slide 28 text
ϥϯΩϯά: ͯ͢
Slide 29
Slide 29 text
ϥϯΩϯά: ͯ͢ (#1~10) 1BHF3BOL HSPVQ BSUJGBDU WFSTJPO KVOJU KVOJU PSHTDBMBMBOH TDBMBDPNQJMFS PSHTMGK TMGKBQJ BMQIB PSHNPDLJUP NPDLJUPDPSF PSHUFTUOH UFTUOH PSHTDBMBUFTU TDBMBUFTU@ PSHNPDLJUP NPDLJUPBMM CFUB KBWBYTFSWMFU TFSWMFUBQJ BMQIB DIRPTMPHCBDL MPHCBDLDMBTTJD PSHPCKFOFTJT PCKFOFTJT http://bit.ly/PackageRank
Slide 30
Slide 30 text
ϥϯΩϯά: ͯ͢ (#11~20) 1BHF3BOL HSPVQ BSUJGBDU WFSTJPO KBWBYTFSWMFU KBWBYTFSWMFUBQJ PSHBTTFSUK BTTFSUKDPSF MPHK MPHK PSHPTHJ PSHPTHJDPSF PSHTMGK TMGKMPHK BMQIB PSHTDBMBMBOH TDBMBMJCSBSZ OFUCZUFCVEEZ CZUFCVEEZ PSHTDBMBUFTU TDBMBUFTU@ OFUCZUFCVEEZ CZUFCVEEZBHFOU PSHTMGK TMGKTJNQMF BMQIB http://bit.ly/PackageRank
Slide 31
Slide 31 text
ϥϯΩϯάτοϓͷ • ςετؔ࿈ • junit, testng, scalatest, assertj, mockito • ݴޠ • Scala (scala-compiler, scala-library) • ϩά • slf4j, logback, log4j (log4j2 ͡Όͳ͍) • ͦͷଞ • objenesis, byte-buddy, servlet-api, org.osgi.core…
Slide 32
Slide 32 text
ϥϯΩϯά: compile
Slide 33
Slide 33 text
ϥϯΩϯά: compile 1BHF3BOL HSPVQ BSUJGBDU WFSTJPO PSHTDBMBMBOH TDBMBMJCSBSZ PSHTMGK TMGKBQJ BMQIB KVOJU KVOJU DPNHPPHMFHVBWB HVBWB PSHBOUMS BOUMSSVOUJNF PSHBOUMS TUSJOHUFNQMBUF DPNHPPHMFDPEFHTPO HTPO PSHKFUCSBJOT BOOPUBUJPOT DPNHPPHMFDPEFpOECVHT KTS PSHKFUCSBJOTLPUMJO LPUMJOTUEMJC http://bit.ly/PackageRank-compile
Slide 34
Slide 34 text
ϥϯΩϯά: compile 1BHF3BOL HSPVQ BSUJGBDU WFSTJPO PSHTDBMBMBOH TDBMBMJCSBSZ PSHTMGK TMGKBQJ BMQIB KVOJU KVOJU DPNHPPHMFHVBWB HVBWB PSHBOUMS BOUMSSVOUJNF PSHBOUMS TUSJOHUFNQMBUF DPNHPPHMFDPEFHTPO HTPO PSHKFUCSBJOT BOOPUBUJPOT DPNHPPHMFDPEFpOECVHT KTS PSHKFUCSBJOTLPUMJO LPUMJOTUEMJC ❗ http://bit.ly/PackageRank-compile
Slide 35
Slide 35 text
ϥϯΩϯά: test
Slide 36
Slide 36 text
ϥϯΩϯά: test 1BHF3BOL HSPVQ BSUJGBDU WFSTJPO KVOJU KVOJU PSHNPDLJUP NPDLJUPDPSF PSHTMGK TMGKBQJ BMQIB PSHUFTUOH UFTUOH PSHTDBMBUFTU TDBMBUFTU@ PSHNPDLJUP NPDLJUPBMM CFUB DIRPTMPHCBDL MPHCBDLDMBTTJD PSHBTTFSUK BTTFSUKDPSF PSHTMGK TMGKMPHK BMQIB PSHTQPDLGSBNFXPSL TQPDLDPSF HSPPWZ http://bit.ly/PackageRank-test
Slide 37
Slide 37 text
ϥϯΩϯά: ͯ͢ (ٯ͖)
Slide 38
Slide 38 text
ϥϯΩϯά: ͯ͢ (ٯ͖) 1BHF3BOL HSPVQ BSUJGBDU WFSTJPO PSHBQBDIFDMFSF[[B QMBUGPSNMBVODIFSTUPSBHFMFT TQBSFOU JODVCBUJOH PSHRJKMJCSBSZ PSHRJKMJCSBSZTIJSPXFC DPNHJUIVCMJWFTFOTF PSHMJWF4FOTFBTTFNCMJFT PSHBQBDIFQPMZHFOFMJCSBSJFT PSHBQBDIFQPMZHFOFMJCSBSZ TIJSPXFC DPNHJUIVCTOPXESFBNBOESPJE XJEHFU PSHCMVFTUFNTPGUXBSFPQFOFPBFYBN QMFBQQMJDBUJPOTQSJOH PSEFSNBOBHFSBQQMJDBUJPO PSHCMVFTUFNTPGUXBSFPQFOFPBFYBN QMFBQQMJDBUJPOTQSJOH XBSFIPVTFNBOBHFS BQQMJDBUJPO LSQFLXPOOBNTQZNFNDBDIFEFYUSB USBOTDPEFST TQZNFNDBDIFEFYUSB USBOTDPEFSTDPSF PSHBQBDIFTFSWJDFNJYCVOEMFT PSHBQBDIFTFSWJDFNJYCVOEM FTBXTKBWBTEL @ NFUBUBSLBHTPOWBMVF HTPOWBMVF http://bit.ly/PackageRank-inverted
Slide 39
Slide 39 text
·ͱΊ
Slide 40
Slide 40 text
·ͱΊ • Artifact ͷґଘؔΛͱʹ PageRank Λܭࢉ ͠ɺartifact ΛϥϯΩϯάͯ͠Έͨ • ·͋·͋ଥͳ݁Ռ…͔ͳʁ • ࠷ۙެ։͞Εͨɺྺ࢙ͷઙ͍ artifact ͚ͩʹߜͬ ͯ PageRank Λܭࢉͯ͠Έ͍ͨ • ࠷ۙͷτϨϯυతͳ artifact Λݟ͚ͭΔ͜ͱ͕ Ͱ͖Δ͔
Slide 41
Slide 41 text
Thank you!