JavaEE Build tools: Eclipse, Maven, Whatever - eclipse

I have a newbie question...
I started learning java web development with eclipse (because it takes too much time to compile and put classes into corresponding directories). Actually, eclipse possesses every tool to develop anything there.
But a few days ago I realized that in the books I read about javaEE development eclipse is not even touched upon or referenced - everything the author does is using such tools as Maven, JUnit...
So I started wondering - maybe not learning Maven I am missing something out?
What is it used for (except structuring of the application), what are its benefits over eclipse? Which IDE`s do developers in companies use to create and deploy javaEE applications? If Maven is used, how do they type the program itself - in Notepad?

I think you have a real mess in terms. So here are some quick tips:
Eclipse is an IDE, you have that right.
Maven is many things but not an IDE - it can help you manage dependencies, build process etc.
JUnit is a testing framework.
All of them can be used together in Eclipse and you can write your code as usual. These tools just help you with some repetitive tasks.
I recommend you not to use Notepad for Java development and suggest you to read this article.

Related

Add library to Vaadin Web App project in Netbeans

I recently used the Library Manager in Netbeans (8.2, on Windows 10) to add a library, as show below:
However, in most guides I find online, in order to actually add the library to the project, I should do the following:
Right click the project -> Select the Libraries tab -> .... further steps ....
However, I haven't even been able to make it past the second step: the Libraries tab simply does not exist on my project properties, as seen below: Is this because the structure for a Vaadin web app project is so different from other Netbeans projects? Any advice would be appreciated
tl;dr
Don’t.
Do not configure libraries manually for your Vaadin project.
Instead, create a new Vaadin project using the template of a Maven archetype provided by the Vaadin Ltd company. Locate and edit the new project’s POM.xml file to list the libraries you need Maven to automatically download and install.
For Vaadin Framework (Vaadin 8), see:
Using Vaadin with Maven
Overview of Maven Archetypes
Maven
Usually Vaadin projects are configured using the Apache Maven tool.
Maven is quite popular across all kinds of Java projects. All three major IDEs (NetBeans, IntelliJ, Eclipse) support Maven-driven projects as an alternative to their own particular project definition system.
Maven has two purposes:
Configure the project parts and define a series of events for the compile-and-build process. You can create a new project pre-configured this way by starting with a Maven archetype (a project template).
Manage “dependencies”. This means you tell Maven what libraries your project needs. Maven then reaches out over the Internet to access a Maven-oriented repository of known libraries. Maven downloads your needed library from that repository, placing it in an appropriate place within your project. Tip: Be patient the first time you do this as Maven builds a local cache of the repository’s database, taking several minutes or more.
You specify both the project-build configuration and your list of desired libraries (“dependencies”) in one or more POM.xml files.
Using Maven eliminates the need to place libraries manually as you are attempting to do. No need to touch the NetBeans Library Manager. Indeed, I believe manually configuring libraries will conflict with Maven, with troubled results.
Using Maven is annoying at first, having to learn the lingo and the concepts. But once you are orientated, Maven does save you time and trouble, and makes your developer life easier. One big benefit: Maven makes switching between the 3 main IDEs much easier since you don’t have to learn about each one’s own idiosyncratic project-build-system.
I recommend you take a few hours to learn the basics. You’ll find many introductions and tutorials on Maven.
The Vaadin Ltd company provides a few good Maven archetypes for a new Vaadin project.
vaadin-archetype-applicationOne is a simpler structure, good for learning Vaadin and also good if building a simple small app.
vaadin-archetype-application-multimoduleAnother archetype is a “multi-module” Maven archetype, good for more serious Vaadin apps. One major feature is that your backend logic such as database-access can be separated from your user-interface logic, each in separate modules. You should definitely start with the simple archetype first. Don’t touch the multi-module archetype until you are comfortable with both Vaadin and Maven (unless you have the guidance of a helpful colleague who is a Maven maven).
By the way, Vaadin development in previous years virtually required the use of a Vaadin-savvy plugin that you would have to install into your IDE. Such a plug-in is no longer needed, now supplanted by Maven. You can ignore old outmoded guides to Vaadin that talk about an IDE plug-in for Vaadin.
Note: This entire Answer applies to Vaadin 8 (Vaadin Framework) specifically, and probably Vaadin 7 (as I recall). Vaadin 10 (Vaadin Flow) is a new ballgame, and I am not yet familiar with the situation there.

Compiling and running an OSGI application in Eclipse

The base of our enterprise application is OSGI and we have several Java projects that are logically OSGI bundles. We use Maven to compile the application using the Maven Bundle plugin. But this process is time consuming and makes it impossible to debug the application. We also use the Runner and Pax(:provison) plugins to run the application. If we could rely on the Auto build function of Eclipse and also debug the application it would make our lives so much easier. Is there a way to configure Eclipse to be able to compile (and may be run) an OSGI-based application?
I'm not entirely sure if I understand you, but here goes.
Well, running/debugging OSGi applications in Eclipse is really easy, as long as your bundles reside in PDE aware projects or at least are on your target platform.
Do you have the source of all your bundles? Debugging without source isn't all that useful. If you do, can you just import all the source of your bundles into your Eclipse workspace?
Otherwise you can create a target platform, add all your bundles to that. (as a first attempt, I'd say dump all your bundles in a directory and point the target platform there)
Either way, then you should be able to Run (or debug)-> OSGi framework -> New -> Pick your bundles -> Start
You can both pick bundles from or target platform and from your workspace.
For building, you can use Eclipse Plugin Development Environment (PDE). Despite its name, it isn't specific to building Eclipse plugins and can be used for working on pure OSGi bundles. Eclipse plugins are OSGi bundles with some extras.
Cannot help you with the running or debugging part, although I do know that some enterprise-oriented OSGi platforms provide extensions to PDE.
If you're already using the maven bundle plugin, you may find that PDE's manifest-first approach isn't a good fit with your existing code-first build (I assume at the end you want both an IDE build for development and debugging, and a command-line build for continuous integration and automated testing).
You have two choices. As others have suggested, you can use Eclipse's integrated PDE, and use Tycho for your maven build. Tycho uses the same data used by PDE, so you don't have to write things down more than once. Alternatively, you can stick with the maven bundle plugin and use bndtools within Eclipse. Like the bundle plugin, bndtools is code-first, so you won't need to worry about maintaining manifests. However, you may find there isn't quite as big a set of features in bndtools as in PDE, and I'd suggest still checking your manifests by hand to make sure you understand what's being generated. Whether you prefer manifest-first or code-first is a bit of a heated philosophical debate.
Look at bndtools. bndtools is using the same bnd that is underlying the maven bundle plugin. You can even use bndtools together with m2e. bndtools is available from the Eclipse market place.

Eclipse configuration to support dual Equinox/Felix environments

What are some configuration changes to make Eclipse PDE best support working with both Equinox and Felix?
Here's an example problem I'm currently having. I can run my application ok via the Eclipse OSGi Framework launcher. Similarly, there are no compilation problems in PDE. However, when running in Felix I will get NoClassDefFoundErrors:
java.lang.NoClassDefFoundError: org/w3c/dom/DOMException
My understanding is it's my Eclipse setup that is at fault here; org.w3c.dom is not a 'default' OSGi package and shouldn't be loaded when I run it in Eclipse. Similarly, the import in my code for org.w3c.dom.DOMException should be an error.
I know how to fix this for Felix: declare an Import-Package. But that's not my question. My question is how to force Eclipse PDE to take on a closer configuration to Felix... basically to make it stricter in loading packages?
I think Equinox does behave like Felix, if you run it stand alone. It's more of an Eclipse legacy thing than an Equinox thing, as stated on osgi.org.
As far as I know, there isn't any way to override the boot delegation from Eclipse, but I'd love to be proven wrong, as I've faced this problem often.
If you are developing a server application I recommend to not use the PDE at all. I am using maven and the maven bundle plugin to develop my bundles. Then I deploy on Apache karaf. Debugging also is quite simple by using the karaf dev:watch command and remote debugging. I never really missed the PDE features and they never worked well with my maven build.
This sounds like that launcher is setting bootdelegation to legacy mode. See the following page on the OSGi Wiki: http://wiki.osgi.org/wiki/Why_does_Eclipse_find_javax.swing_but_not_Felix%3F

How to use Jersey with Eclipse Helios?

My base need is to use the Jersey framework to develop very basic REST webservices.
I've read several tutorials regarding Jersey (JAX-RS framework) and writing webervices but so for I've not found an easy way to setup a development environment based on Eclipse Helios and Glassfish (Open Source Edition). When creating a Webservice in Eclipse, it seems to use JAX-WS, or when creating a Dynamic Web App, Eclipse reports a credentials error (I use admin/admin) or a wrong user name / password.
The tutorials I've found either use myEclipse, or Tomcat, or Maven. The later works pretty well but I wish I could avoid using the command line because creating the web.xml and other files like that one is really scary, and I'm not sure these files are supposed to be human-written. So I suppose (maybe I'm wrong) using a IDE will make things easier.
What do guys use ? How do you generate these files ? Do you use Eclipse only for writting code or also use the deploy facilities?
Any pointers are appreciated !
Thank you
SCO
You DO need to modify web.xml whenever it's needed. Especially with JAX-RS, you will have to define your servlet in web.xml.
I recommand you to use Maven. There are plenty of exemple in the web to do so. Good luck, JAX-RS is really great ! Maven is also nice.
I also use eclipse for creating and consuming web service based applications. In addition to WTP, I also use Axis plugins to make things easier (through wizards, highlighting as well as for schema verification).
The bottomline is to find the plugins that suit you the best

seam-gen vs eclipse seam web project

I'm trying to learn how to develop a j2ee web application but is currently figuring out what's the advantage of using seam-gen vs eclipse seam web project or vice versa.
Why would I use one over the other?
Thanks,
czetsuya
Command line seam-gen stuffs the whole application into a single project and included some files that we didn't need (6 versions of the messages file, for example, each in a differnet language).
The eclipse jboss tools seam-gen produces a bit more modular, streamlined app. It generates 3 separate projects (4 if you want a test project). It took some time to get used to it, but once I got it down, I prefer it. Additionally, when you create he project in eclipse you can leverage more easily the benefits of using those integrated tools.
You can do this with a seam-gen commandline-generated project as well by creating an eclipse project using your seam-gen project as source , but it takes some fiddling around in eclipse to get the settings just right.
My recommendation is to go with eclipse/jboss tools. If you come from a command-line centric background (as I did), the learnign curve may be a bit steeper, but in the end it will be worth it. Use the jboss tools forum for questions you have about this project.
Good luck. Once you get going with eclipse/jboss you'll find it's a great environment to work in.