intelij multi module maven capabilities - java

I've recently moved from c# .Net / Visual Studio, to Java / Maven InteliJ Idea Community.
Some things that I expect my IDE to do for me seems missing:
Generating a dependency graph between my modules to see which module references what dependent modules. I expected some kind of GUI or plugin for visualising these connections - but find myself going through multiple pom files manually.
Viewing which external dependencies are used by my app across modules and compare their versions. Being able to add an external library that is already referenced by some of my modules, to a newly created module, without the need to copy paste pom xml.
NUGET was used for discovery of new libraries and updates in .Net, is there an equivalent tool for that in InteliJ+Maven ?
Thanks

IntelliJ has similar features :
1) The IntelliJ built-in maven plugin has a feature a show dependencies icon
2) You can enable the maven auto-import for your project, IntelliJ will check unresolved dependencies for you

Related

Cant reference org.osgi.* in plugins

Some time ago, I created a project with multiple OSGi plugins. Today I reinstalled Eclipse for RCP and RAP Developers, imported the project, and discovered that some errors are occurring in the plugins. Specifically, the org.osgi.* path can't be referenced:
Does anybody know, why this reference errors are occurring and how to resolve them?
The project must be missing the required OSGi core dependencies on its classpath. There are two ways to resolve this:
Make sure the project is created as a plugin project, and that the MANIFEST.MF exists. There should be a project creation wizard that allows you to create the project as an Eclipse plugin.
If you use Maven in your project, the best way to manage your RCP projects is to use Tycho. It helps automatically resolving plugin dependencies and building your project (even from the command line) and is a much better solution for the long term.
Maybe you are missing the target platform setup. This is where plugin projects get their build time dependencies from.

In an Eclipse Java project that is dependent upon two other projects, how do you resolve jar conflicts?

This is the situation as best I can describe (I didn't create this project, so I can't say why it was done this way).
I have 3 projects:
SupportProject_A
SupportProject_B
MainProject which is dependent upon both support projects (in required projects in the build path).
SupportProject_A has SomeJar1.0.jar
SupportProject_B has SomeJar2.0.jar
The name spaces and class names are the same in both version of SomeJar, but the class definitions differ. This is causing havoc because eclipse is complaining that SomeClass.method does not exist, which it does in SomeJar2.0.jar, but not in the 1.0 version.
Is there a way, in MainProject to say, ignore SomeJar1.0.jar from SupportProject_A?
Use Dependency management system like Maven or Gradle (Gradle is my fav though). You get the plugin for both in eclipse. Once you figure out which one suits your requirement, find out which jar version is suitable for both the projects and add that to the build.gradle file along with the repository that has these versions. You should be able to setup the whole project with gradle and gradle takes care of the rest!! Good luck.
Eclipse used to build projects? It's so 2001.
But, anyway. There is two options:
1) Use one version of the library for every project.
2) Use maven.
My choice would be to use maven as relying on IDE to build your project is a bad practice.

Multi module Ant build system and Eclipse

Se lets say you are starting with a multi-module project. A library and two modules which will depend on that library.
I am planning on using ANT plus Ivy for dependency management. So I am looking for a way to integrate Eclipse + ant + ivy.
So the standard way of working with these tools would be to create a different project in eclipse for each module? or create a Single project and multiple src folders for each module?.
Although my question might seem like a very subjective one, I am looking for a standard way to handle multi-module projects under Eclipse when using an external tool for building and dependency management. And by a standard I mean, in a way that eclipse will find the dependencies for my project, auto complete works and src and javadoc will be available when needed inside the IDE, also that when debuging within Eclipse, the source will be attached to navigate through the breakpoints.
Please don't tell me to use Maven, I have used it already and hate it with passion.
You have IvyDE which works well with dependency management (can be Jar from repository or Ivy module in the workspace).
Each Eclipse project is an Ivy module whose dependency may be resolved from workspace (build path entry from eclipse project) or an Ivy resolver (build path entry from the Ivy cache).
For the developer workflow, I think you doesn't need Ant since Eclipse will build the projects for you, and for the CI build, the Ant script will use the same Ivy modules definition. The only difference is that at each module build, a publication will be done and you'll need something else (Jenkins?) to make dependency build trigger (which in turn will resolve their dependencies from Ivy and publish their artifacts).
There is also Ivy trigger after a publish task to trigger other project?
The Ivy buildlist task may work as well but never used myself.

Applying Maven to a project

I've been asked to apply Maven to a project. After browsing a dozen sites it appears that it's quite vast and I'm not familiar as I'd like with similar tools like Ant. Why is it used/preferred and what does it offer over a standard Eclipse project? Also, how could it be added to an existing project?
Why is it used/preferred and what does
it offer over a standard Eclipse
project?
It is a build tool which can build your project without the need for an IDE like Eclipse. It can create a jar or war or other artifacts from the source, performing a bunch of steps like compilation, running unit tests, etc.
Where maven scores over ant is in managing third-party dependencies and in convention over configuration (which mean less lines of build script if you follow convention).
Also, how could it be added to an
existing project?
You start by creating a new maven project, following the step here.
Place it in the root folder of your project
If your source and resource files do not follow maven folder convention, update maven properties suitably referring to this documentation.
Run mvn package
It will fail if it needs any third party dependencies, which you can add as specified in the doc
With some trial and error, you should have your project running with maven, possibly, much quicker than if you were to set up the same with ant.
Others are already provided sufficient resources to read more about maven.
I suggest to start reading here:
http://www.sonatype.com/books/mvnref-book/reference/public-book.html
Maven is a great tool when you know how to use it. Maven (at core) is a dependency manager.
You include in your pom.xml (similar in function to the build.xml from Ant) all the librairies your project depends on (example : apache commons) along with their version and Maven get them directly from a repository (by default, the central maven repository)
Then you do not have to manually install any jar to make your project work. All is downloaded and cached on your local machine. You can even create an enterprise repository where you put all the jars needed by your company
Maven uses the concept of artifacts which are pre-built library projects with their own dependencies
To mavenize a project, you'll have to write a pom.xml describing your project (examples are numerous), get rid of your libs directory (or whatever classpath you described under Eclipse) and add all your dependencies to your pom.xml
You could also check Mavenizer for a first-start
But Maven is a lot more what i've just said. Read the docs, read poms from librairies and you'll get used to it quickly ;-)
If you use the M2Eclipse plugin from Sonatype, it's just a matter of right clicking the project in the package explorer and choosing Enable Dependency Management in the Maven menu. You are also advised to adjust the directories that contain the sources to the Maven standard directory layout but if you absolutely can't, you can configure that later.
Apart from that: Well, look for tutorials and documentation (for example there is the free book Better builds with Maven. Maven is very complex (yes, I don't think it is simple) and very powerful.

Working with Maven

I downloaded Java source code of some project that works with Maven. After checking out
the code to Eclipse, and then building it from the command line, I followed the instructions
and imported it from Eclipse as: File > Import > Maven Projects. Now I have the core source code and many additional sub projects that seem to have the same thing like the core, just separated.
Could anyone please explain me what are these sub projects? why I need them? and on which code I need to work now if I want to make changes, the core or the new imported Maven ones?
I don't know nothing about Maven besides the fact that it's a tool for building code and managing releases.
Thanks!
In Maven land, these are called modules. There a nice way to further divide a project into very distinct pieces.
People handle Maven differently. I've seen projects where there was the actual project module, then 10 or so implementation modules. Most people use them for the above mentioned separation.
Most likely, your going to need all of the modules in order to work correctly.
To modify the project, your going to need Maven. I don't know if Eclipse has an embedded maven, but at least NetBeans does. With this you can modify anything that you want, then build it with Maven, which should be just a simple click.
In addition to what #Quackstar said:
Eclipse has embedded Maven support provided by the m2eclipse plugin. When you import a Maven project consisting of multiple modules, the default behavior is to map each Maven module as a separate Eclipse project. This allows the Eclipse build paths to be constructed in a way that matches the declared Maven module dependencies.
There is also a way to map a multi-module Maven project into a single Eclipse project that entails enabling m2eclipse's "Nested Module" support. This results in an Eclipse project with a build path that is an amalgam of all of the Maven module dependencies ... and not exactly correct. This approach is not recommended by the m2eclipse developers, and I've heard they are intending to remove the nested module feature entirely in a future release.

Categories

Resources