Introducing Package Search EAP

We’re happy to announce a new plugin for IntelliJ IDEA that will provide you a better experience when it comes to finding and managing dependencies in your JVM projects. And if you’re a Kotlin developer, you’ll be getting an additional bonus!

Finding the right package

You’re starting a new project, or working on an existing one, and you want to make some HTTP calls…

Hmm. Which library is the one that most folks are using? Let me Google it. Well there’s a bunch of them. 

StackOverflow tells me this is the best and greatest. Wonder if it’s still maintained. Let me look at the Stars and Forks. 

OK, I’m going with this one. Right. Let me find it on Maven Central. 

Copy/Paste.

Done

We’ve all been there. Even if we know the library we want to use, we still go through the process of finding the latest version and referencing it in our project.

Welcome to Package Search

With Package Search this is now much simpler. From within the IDE, you can search, evaluate and manage all your dependencies. 

Pull up the Packages tool window or simply invoke the Package dependency action to search for new packages. 

Package Window Search

The Package Manager Window provides information such as the source code links, activity on StackOverflow, GitHub, and all accessible directly with links from the entry. In addition it provides a list of all currently installed packages. From here you can add, remove, and update packages.

Update All

We currently support Maven and Gradle, although the system is completely pluggable and we’ll be adding support for other build tools in the future.

Add Package

 

Code Completion Functionality 

If you prefer adding dependencies directly yourself in your build files, you’ll be pleased to know that for starting with the 2019.2 IDE, you’ve already been using Package Search. The code completion that IntelliJ IDEA provides since the latest version is based on the Package Search Server, making it not only more complete but faster in terms of performance also.   

Code Completion

Kotlin and Multiplatform discovery

If you’re a Kotlin user, you may have come across a certain scenario where you’re looking for a library and not sure which platforms it supports. Or in the case of developing multiplatform applications, you’d want something that supports all your target platforms. 

Package Search caters to this need by providing you additional information about target platforms for libraries. The example below shows the case of assertk, a multiplatform library with support for a variety of targets. On the right pane you can see the specific ones as tags. 

Search multiplatform

Trying it out

To get the Package Window and visual interface, you need to install the Package Search plugin that is available on the marketplace. 

If you’re using IntelliJ IDEA 2019.2 or later, you’re already using this functionality when it comes to code completion for packages. 

What’s in store

We have a ton of functionality planned for Package Search, amongst other things

  • Web Interface
  • Gradle Kotlin DSL
  • Additional package repository indexing
  • Support for multiple package formats
  • Enhanced package metadata, including ranking
  • Powerful query and sorting options

For those of you who have experience with NuGet and are using our .NET IDE Rider, this will definitely be familiar to you. The enhancements however are that we now have our own package index with additional metadata. 

But Package Search is all about making discovery and dependency management easier, avoiding you having to spend time searching, collecting information and copy/pasting code. Your time is valuable, so that last thing we want is for you to read long blog posts.

Try it out and and let us know if you have any feedback.

This entry was posted in New Features. Bookmark the permalink.

8 Responses to Introducing Package Search EAP

  1. ADEV says:

    Nice, i always felt like JAVA needed something like nuget UI on Rider/Visual Studio

    This is awesome, thanks!

  2. Matthias says:

    Interesting, however, the code completion is, at least for me, a little bit “wonky”. I’m using IdeaVim, maybe it has something to do with it.

    For example, when I try to add a new Gradle dependency, I enter “implementation” and then start to type in the group id (e.g. org.springframework…). When I type “org” the the autocompletion starts, but after the first dot the popup is hidden again and Ctrl-Space yields “No suggestions”. Event typing “org.springfr….” does not open the auto completion. Sometimes it comes up near the end of the group id, but when I select an entry only the group id is inserted and I have to hope the further typing opens the popup again to let me chose the artifact id.

  3. jacky says:

    Any plan to implement npm package search for Node? It’s really important for Node.js developers. Too many npm package, and too much example code to refer. :)

  4. dmitri says:

    No good for Android Studio?

    Error executing task com.jetbrains.packagesearch.intellij.plugin.ui.toolwindow.PackageSearchToolWindowFactory$createToolWindowContent$1@db9d573

    java.lang.NoClassDefFoundError: com/jetbrains/rd/util/lifetime/Lifetime
    at com.jetbrains.packagesearch.intellij.plugin.ui.toolwindow.PackageSearchToolWindowViewKt.defineNestedLifetime(PackageSearchToolWindowView.kt:66)
    at com.jetbrains.packagesearch.intellij.plugin.ui.toolwindow.PackageSearchToolWindowViewKt.createLifetime(PackageSearchToolWindowView.kt:72)
    at com.jetbrains.packagesearch.intellij.plugin.ui.toolwindow.PackageSearchToolWindowViewKt.access$createLifetime(PackageSearchToolWindowView.kt:1)
    at com.jetbrains.packagesearch.intellij.plugin.ui.toolwindow.PackageSearchToolWindowView.initToolWindow(PackageSearchToolWindowView.kt:21)
    at com.jetbrains.packagesearch.intellij.plugin.ui.toolwindow.PackageSearchToolWindowFactory$createToolWindowContent$1.run(PackageSearchToolWindowFactory.kt:44)
    at com.intellij.openapi.project.DumbServiceImpl.doRun(DumbServiceImpl.java:380)
    at com.intellij.openapi.project.DumbServiceImpl.updateFinished(DumbServiceImpl.java:372)
    at com.intellij.openapi.application.TransactionGuardImpl.runSyncTransaction(TransactionGuardImpl.java:88)
    at com.intellij.openapi.application.TransactionGuardImpl.lambda$pollQueueLater$0(TransactionGuardImpl.java:74)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.doRun(LaterInvocator.java:435)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.runNextEvent(LaterInvocator.java:419)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:403)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:764)
    at java.awt.EventQueue.access$500(EventQueue.java:98)
    at java.awt.EventQueue$3.run(EventQueue.java:715)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:734)
    at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:757)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:706)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:375)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
    Caused by: java.lang.ClassNotFoundException: com.jetbrains.rd.util.lifetime.Lifetime PluginClassLoader[com.jetbrains.packagesearch.intellij-plugin, 1.0.763-eap] com.intellij.ide.plugins.cl.PluginClassLoader@3944e815
    at com.intellij.ide.plugins.cl.PluginClassLoader.loadClass(PluginClassLoader.java:51)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    … 29 more

  5. Odd Christer says:

    What would be great is integration with something like dependency-check or Snyk for vulnerability data. A great way to make it more visible to developers that are not already aware of or using these tools.

  6. chonger says:

    Any plan for supporting custom hosted maven repository(like nexus)?

Leave a Reply

Your email address will not be published. Required fields are marked *