100 лучших библиотек Java 2018 года — выводы после анализа 277 975 исходных кодов

Java GitHub открытый источник Google

Время, как текущая вода, в мгновение ока подходит к концу 2018. Уходящий год можно назвать сумасшедшим. SpaceX успешно запустила ракету Falcon Heavy, а Apple стала первой публичной компанией, преодолевшей рыночную стоимость в 1 триллион долларов.

В 2018 году в ИТ-кругах тоже произошло много крупных событий и радостных событий: вышел SpringBoot 2, вышли версии Java 10 и 11, GitHub женился на Microsoft, IBM женился на RedHat и т. д. Как и в предыдущие годы, мы проанализировали топ-100 рейтинга. в 2018 г. Библиотека классов Java.

Недавно OveOps объявилаThe Top 100 Java Libraries in 2018 - Based on 277,975 Source Files, Холлис проверил список, сделал переводы и дополнения и показал вам библиотеку классов Fengyun Java в 2018 году, надеясь дать вам некоторую помощь и вдохновение для использования Java. Нельзя сказать, что библиотеки в списке самые лучшие, но, по крайней мере, в настоящее время они более популярны.

100 лучших библиотек Java 2017 года — выводы после анализа 259 885 исходных кодов

100 лучших библиотек Java 2016 года — выводы после анализа 47 251 зависимости

20 самых популярных библиотек классов Java

В этом году рейтинг Top 100 библиотек классов Java претерпел кардинальные изменения, и первое место изменилось.JUnitВыигрывал чемпионат три раза подряд. А в этом году чемпионатfasterXML/Jacksonзанимать. И эта библиотека классов заняла 14-е место в 2016 году и 18-е место в 2017 году.

Jackson — это библиотека JSON, которая может легко преобразовывать JSON в объектную модель Java и преобразовывать объектную модель Java в строку JSON. В списке прошлого года Джексон занимает первое место среди всех библиотек JSON.

Джексон полагается на меньшее количество jar-пакетов, прост в использовании и имеет относительно высокую производительность, сообщество Джексона относительно активно, а скорость обновления относительно высока. Имеет следующие характеристики:

  • Простота использования. API-интерфейс jackson предоставляет высокоуровневый внешний вид для упрощения распространенных вариантов использования.
  • Нет необходимости создавать карту — API предоставляет карту по умолчанию для сериализации большинства объектов.
  • Высокая производительность — быстрота, малое потребление памяти, подходит для больших графов объектов или систем.
  • Чистый JSON - Jackson Создайте чистый и компактный результат JSON, таким образом, люди очень легко читать.
  • Никаких зависимостей — библиотека не требует никаких других библиотек, кроме JDK.
  • Открытый исходный код — jackson имеет открытый исходный код и может использоваться бесплатно.

Три члена семьи JUnit, вошедшие в тройку лидеров в прошлом годуJUnit,JUnit Runnerиjunit.frameworkВ этом году они заняли третье, четвертое и пятое места соответственно.

Второе место в этом годуApache Hadoop, представляет собой программную среду с открытым исходным кодом, которая поддерживает распределенные приложения с интенсивным использованием данных и выпускается под лицензией Apache 2.0. Он поддерживает приложения, работающие на больших кластерах, построенных на обычном оборудовании. Основной дизайн платформы Hadoop: HDFS и MapReduce. HDFS обеспечивает хранение массивных данных, а MapReduce обеспечивает вычисления для массивных данных.

Среди наших 20 лучших библиотек мы можем найти Jetty от Eclipse Foundation, Shiro от Apache Foundation, Netty и библиотеку Guice от Google, среди прочих.

Jetty

Jetty — это чистый веб-сервер на основе Java и контейнер сервлетов Java. В то время как веб-серверы часто используются для представления документов людям, Jetty часто используется в более крупных программных средах для связи между компьютерами.

Shiro

Apache Shiro — это платформа безопасности с открытым исходным кодом, которая обеспечивает аутентификацию, авторизацию, криптографию и управление сеансами. Платформа Shiro интуитивно понятна и проста в использовании, а также обеспечивает надежную защиту.

Netty

Netty — это среда программирования клиента и сервера на основе NIO.Использование Netty может гарантировать, что вы сможете быстро и легко разработать сетевое приложение, такое как клиентское и серверное приложение, которое реализует определенный протокол. Netty эквивалентна упрощению и оптимизации процесса программирования и разработки сетевых приложений, таких как разработка службы сокетов на основе TCP и UDP.

Guice

Guice — это облегченная среда внедрения зависимостей (IOC) на основе Java5 (в основном с использованием универсальных шаблонов и функций аннотаций), разработанная Google. Guice очень маленький и быстрый. Guice является типобезопасным, он может внедрять конструкторы, свойства, методы (любой метод с любым количеством параметров, а не только методы установки).

Кроме того, в списке топ-20 есть и сборка лога с открытым исходным кодом —ch.qos.logback, набор инструментов, предназначенный для микробенчмаркинга кода --org.openjdk.jmh,

Кроме того, мы знакомы со многими распространенными библиотеками классов под apache, такими какapache.commons.lang,org.apache.ibatis,org.apache.maven,org.apache.http.client,apache.commons.lang3Ожидание и т. д. в топ-20 списка.

Библиотека Java, которую выжали из топ-20

Чтобы проанализировать изменения в списке, мы сравнили 20 лучших библиотек классов в 2017 году и список библиотек классов этого года. Мы обнаружили, что в дополнение к сокращению использования JUnit некоторые библиотеки находились в упадке, а некоторые даже были вытеснены из топ-20.

Нести основную тяжесть прошлогоднего четвертого и пятогоMockitoиslf4j, был безжалостно выброшен из топ-20 в этом году, заняв 23-е и 25-е места соответственно.

Важнейшее событие прошлого года, занявшее шестое место, помогло написать структуру для тестирования программного обеспечения на языке Java.HamcrestВ этом году он опустился на 37-е место.

опоздавшие, заслуживающие внимания

Главное, что мы увидели по итогам этого года, это то, что все может измениться. Библиотеки в нижней части списка, скорее всего, будут в верхней части списка в следующем году. Вот почему мы рассмотрели некоторые из менее популярных библиотек в диаграмме 2018 года и отследили их в 2019 году, например:

#85 org.objectweb.asm – A simple API for decomposing, modifying, and recomposing binary Java classes
#86 com.google.common.primitives – Google Guava Primitive Types
#87 com.datastax.driver – DataStax Java Driver for Apache Cassandra
#88 org.json – The data interchange format
#89 org.apache.commons.math3 – The Apache Commons Mathematics Library
#90 com.netflix.hystrix – A latency and fault tolerance library designed to isolate points of access to remote systems, services and 3rd party libraries.

организации, которые вносят больший вклад

Каждый год мы извлекаем лучшие библиотеки Java из GitHub и начинаем работать с этими данными. Большая часть этой обработки выполняется вручную из-за необходимости различать разные папки одного владельца. Вот почему в нашем списке есть много библиотек com.google.common, а также org.springframework и org.apache и так далее.

В этом году мы решили шире взглянуть на лучшие библиотеки Java, чтобы узнать, кто является их главными «владельцами». Мы объединили org.eclipse.XX, org.codehaus.YY, io.nedy.ZZ и подобные библиотеки под одной организацией и составили следующий список:

В верхней части списка находится основа apche, с которой мы все знакомы и которая часто фигурирует в топ-20 списков.

2 место: springframework 3 место: google 4 место: junit 5 место: eclipse

В списке этого года стоит отметить, что одна организация из Китая вошла в топ-20 по общему количеству предоставленных библиотек классов, что на картинке выше занимает 15-е место.Alibaba.(Как человек Али, автор очень горд!!!)

Среди 100 лучших библиотек классов Java,com.alibaba.otterЗанимает 85-е место. otter — это база данных mysql/oracle, основанная на инкрементном анализе журналов базы данных, синхронизации в квазиреальном времени с локальным или удаленным компьютерным залом, распределенной системе синхронизации баз данных.

Alibaba作为一家互联网公司,过去得几年在开源领域做出了很多卓越的贡献。最近几年,Alibaba向Apache基金会捐献了多个重量级开源项目。如JStorm、RocketMQ、Dubbo、Weex等,相信这些项目必将在开源社区的滋养下成长的更加茁壮! ! !

Аналитический метод

Наш подход к извлечению данных и чисел аналогичен прошлогоднему. С помощью команды разработчиков OverOps мы в основном используем Google BigQuery и GitHub API. Мы извлекли 1000 лучших репозиториев, из которых мы извлекли библиотеки Java, используемые этими репозиториями.

BigQuery — это полностью управляемое недорогое корпоративное хранилище данных объемом в петабайт, разработанное Google для нужд анализа данных. Служба позволяет разработчикам использовать структуру Google для выполнения операторов SQL для работы с очень большими базами данных. BigQuery может сканировать 1 терабайт данных за секунды и 1 петабайт за минуты.

Среди 277 975 исходных файлов Java, извлеченных из GitHub, мы отфильтровали Android, Arduino, дубликаты и устаревшие репозитории. На данный момент у нас остался 28 021 исходный файл Java. После нарезки и анализа мы получили окончательный топ-100.

Talk Is Cheap ,Show You The Code

Во-первых, мы создаем складскую таблицу для хранения библиотек классов, получивших наибольшее количество звезд, называемыхjava_top_repos_filtered:

SELECT
  full_name
FROM
  java_top_repos_1000
WHERE NOT ((LOWER(full_name) CONTAINS 'android') OR
           (LOWER(full_name) CONTAINS 'arduino'))
      AND ((description IS null) OR
           (NOT ((LOWER(description) CONTAINS 'android') OR
                 (LOWER(description) CONTAINS 'arduino') OR
                 (LOWER(description) CONTAINS 'deprecated'))));

Теперь, когда у нас есть имена высших библиотек, мы все потянули их:

SELECT
  repo_name,
  content
FROM
  [bigquery-public-data:github_repos.contents] AS contents
INNER JOIN
(
  SELECT
    id,
    repo_name
  FROM
    [bigquery-public-data:github_repos.files] AS files
  INNER JOIN
    java_top_repos_filtered AS top_repos
  ON
    files.repo_name = top_repos.full_name
  WHERE
    path LIKE '%.java'
) AS files_filtered
ON
  contents.id = files_filtered.id;

На данный момент у нас есть исходный код каждого проекта, нам нужно отфильтровать оператор импорта после дедупликации, а затем извлечь имя пакета.

SELECT
  package,
  COUNT(*) count
FROM
( //extract package name (exclude last point of data) and group with repo name (to count each package once per repo)
  SELECT
    REGEXP_EXTRACT(import_line, r' ([a-z0-9\._]*)\.') package,
    repo_name
  FROM
  ( //extract only 'import' code lines from *.java files
    SELECT
      SPLIT(content, '\n') import_line,
      repo_name
    FROM
      java_relevant_data
    HAVING
      LEFT(import_line, 6) = 'import'
  )
  GROUP BY
    package,
    repo_name
)
GROUP BY
  package
ORDER BY
  count DESC;

Наконец, мы делаем еще один фильтр, чтобы убедиться, что нет Android, Arduino, устаревших или собственных библиотек, предоставляемых Java.

SELECT
  *
FROM
  java_top_package_count
WHERE
  NOT ((LEFT(package, 5) = 'java.') OR
       (LOWER(package) CONTAINS 'android'))
ORDER BY
  count DESC;

На данный момент у вас есть список 100 лучших библиотек Java в 2017 году.

Последние мысли

Java претерпел некоторые изменения за последние несколько месяцев. Он начинается с 6-месячного цикла выпуска, и недавно мы узнали, что в свободном доступе будут только сборки OpenJDK, в то время как общедоступные обновления Java SE 8 потребуют коммерческой лицензии для производственного использования.

Изменение влияет на Java Developers, мы видим, что разные степени популярного Github Top из этой библиотеки Java. Недавние новости о расходах на обновлении Java SE могут привести к увеличению библиотеки, связанной с OpenJDK, связанным с OpenJDK, и может даже передавать данные в библиотеку, связанную с бизнесом.

Наконец, если вы хотите получить весь список, обратите внимание на официальную учетную запись Hollis (ID: hollischuang) и ответьте в фоновом режиме: список, вы можете получить полную версию PDF.