I have an Apache Maven Project for JIRA REST API. Now I am creating a JSP project to send some data to java file in my Maven Project. I want to know how can I merge them in single project. Maven Project has a pom.xml file and the java file for Maven are located in src/main/java whereas for JSP it is in different folder. (Java Resources/src)
Can anyone please tell what folder should I copy and merge?
EDIT: Found the answer. Right click the Maven project and go to Project Facets and check Dynamic Web Module option.
you can create a Maven Webapp using following archetype
-DarchetypeArtifactId=maven-archetype-webapp
which will automatically creates the desired folder structure
in your case its apart from src\main\java
src\main\resources
src\main\webapp
src\main\webapp\WEB-INF --THIS IS WHERE JSP's will go
Standard Maven Directory Layouts
Maven Web Application
Found the answer. Right click the Maven project and go to Project Facets and check Dynamic Web Module option.
Related
I saw lots of questions including this one : How to create an war file in Eclipse without ant or maven?
I have standard web project created with eclipse. In this web project like many others there isn't only jsp and web files, but java files also. I am using eclipse Luna and I am trying to export my project as war but when I use the export option and package it like war it packages only my web content. Normally after I deploy it to tomcat it fails on login in my site because there is no java files on the war. I am new to the web projects and I do not want to use maven or ant. I want to just simply make working war from eclipse and could not find normal way to do that.
Right Click on your Web project --> export --> War file --> Choose destination path and select on Export source files.
See the below screen shot:
After creating Excel2DB22.war. I have imported it again into my IDE. I can see all the files including java also in that project.
See the below SS:
I hope it will help you.
I Have Created a BndTools OSGi project that generates a .jar file.Now i want the BundleContext of that jar in my main project i.e. Dynamic Web Project (.war File).
Dynamic web Project doesn't contain bnd.bnd file.So i can't inject that jar's dependency.
Are there any ways by which i can achieve this.
This can be accomplished two ways.
Quick and dirty way
Create dynamic web project
Right click web project > Choose Properties menu
Click on Deployment Assembly
Click Add
Select Project for assembly directive type
Select the bndtools project
Repeat for 2nd project you want
Deploy this web project to server or export war and notice that the output of the
Note this jar will only create the classes and no other resources that are usually created by the bnd.bnd file (e.g. correct Manifest, other included resources)
Better and more correct way
Deploy the 2 jar files created by bndtools to some artifact repository local or public
Create a new maven project using war packaging (e.g. default web project archetype)
Specify these two bndtools project jars as dependencies
Install the m2e-wtp plugin from its updatesite for Eclipse (which imports maven war projects and automagically creates eclipse dynamic web projects with all dependency references setup)
Import the maven web project using File > Import > existing maven project
During import the m2e-wtp project configurator will be activated and the necessary settings for including your 2 bndproject jars as dependencies will be correctly setup
I have several questions about creating a Java Web application with Maven and Eclipse:
How do I create a Java web project with servlets, jsp, and other classes with Maven?
It creates a simple directory structure, src->main->java. Where and how do I put the web-inf folder?
Do I need to add the jdbc-drivers manually to the folder inside the web-inf/lib, or is it ok just to point out the dependency?
Is there a way to test the servlets with junit?
Wow that's a lot of questions at once. I admit that setting up a webapp project with Maven and Eclipse can be tricky, so I'll try to answer them all.
Creating a Web application project with Maven
How do I create a java web project with servlets jsp and other classes with maven? It creates a simple directory structure, src->main->java.
When you are creating a Java web project, the final product should be a WAR or EAR file. WAR and EAR files are JAR files with a specific structure that can be deployed in an application server or servlet container.
As mentioned, the easiest way to set up a Maven project for web applications is to use archetypes:
mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp
If we create a project with this archetype then a simple directory structure and pom.xml are generated. This project follows the standard Maven directory layout you mention, with /src/main/java/, /src/test/java, etc. Maven generates the WAR file from this structure with the war:war goal.
Note that this archetype is for a very simple (outdated) web application, but it's the best available starting point. You probably want to discard the web.xml file and create a new one that supports Servlet 3.0.
WEB-INF location
Where and how do I put the web-inf folder?
By default, Maven expects resources that should go in the root of the WAR file -- such as images, html pages and the WEB-INF directory -- to reside in /src/main/webapp/. So the WEB-INF folder should be located at /src/main/webapp/WEB-INF/. If you use the maven-archetype-webapp this directory is automatically created, along with a sample web.xml file.
Eclipse integration
You mentioned Eclipse in the question title, and it is indeed possible to develop Mavenized web applications in Eclipse with the m2eclipse plugin. Eclipse has good support for Web applications through WTP (Web Tools Platform).
Although many guides on the internet (wrongly) recommend it, you should not use the mvn eclipse:eclipse command to create the Eclipse project. This plugin can only generate WTP projects for very old Eclipse versions (WTP 2.0 is the maximum). Instead, use the m2eclipse plugin as described here.
Dependencies
Do I need to add the jdbc-drivers manually to the folder inside the web-inf/lib, or is it ok just to point out the dependency?
There is no need to do this manually, since one of the key strengths of Maven is dependency management. If you add a dependency in the pom.xml with a scope of compile or runtime, the JAR file will be automatically included in the WEB-INF/lib/ directory of the WAR file. For example to add the Postgresql JDBC driver dependency, add this to your pom.xml:
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901.jdbc4</version>
</dependency>
Since the scope is unspecified Maven will assume it is in the the default scope compile. The result is that Maven will include WEB-INF/lib/postgresql-9.1-901.jdbc4.jar in the WAR file.
Testing
Is there a way to test the servlets with junit?
This question has been asked (and answered) on Stackoverflow:
Unit testing a Java servlet
Unit testing servlets
References
Hello World with JSF 2.0, Glassfish 3, Maven, SVN and Eclipse.
You should create a project based on the webapp Maven archetype, not the default one you're using.
I'm using SpringSource Tool Suite, which, for this exercise, is the same as Eclipse with m2e. Create a new Maven project and make sure you select the following archetype:
The Maven the command-line way of doing this is:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp
This archetype will put the WEB-INF folder in the correct location (under src/main/webapp).
You can find more information at http://maven.apache.org/guides/mini/guide-webapp.html
Just create a normal "Dynamic Web Project". Then right click the project name and select Configure > Convert To Maven Project. It can take up to a minute to complete the conversion, so be patient. See the following article:
http://aykutakin.wordpress.com/2013/12/04/create-eclipse-dynamic-web-project-with-maven-2/
If that doesn't work, try this:
http://crunchify.com/how-to-create-dynamic-web-project-using-maven-in-eclipse/
Step 1: create your web app folder.
Step 2: Move to that folder in command prompt.
Step 3: use following command:
mvn archetype:generate -DgroupId=com.helloworld -DartifactId=HelloWorldDemo -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
DarchetypeArtifactId=maven-archetype-webapp will create a maven web project.
Step 4: Now on command prompt go inside the project folder and use this command:
mvn eclipse:eclipse -Dwtpversion=2.0 to make your project a dynamic web project for eclipse, now import this newly created project as an "Ëxisting project"
Use m2eclipse plugin of eclipse to enable MAVEN in eclipe.
Web.xml will be at \src\main\webapp\WEB-INF
I have in Eclipse web application project that depends from other projects.
When I run debug on embedded Tomcat in lib folder that Eclipse copied not jars, but folders with names like:
dependent_lib1.jar
dependent_lib2.jar
dependent_lib3.jar
....................
So web application don't start because didn't found some files. When I manually deleted all these folders and manually copy jar files - all works.
Does it possible ask Eclipse (or maven - this is maven project) to copy jars or ask Tomcat use folders like jars?
Thanks.
Here is how I think it should be done with maven:
If the other projects are also maven projects, export them as maven artifacts in your local repository. A nice article is Maven Deploy Plugin - If they are not maven projects you should manually generate the jar files and add them to the repository, some information can be found at Best way to create a maven artifact from existing jar
Add the exported artifacts as dependencies to your project. A lot of details can be found at Introduction to the Dependency Mechanism
Hope this helps.
Eclipse cannot do it as its just an IDE, you would need use A BUILD SCRIPT using ANT(Copy tag should do it) and run it before you start your server.
Check this for more details:
http://www.javabeat.net/tips/103-writing-simple-ant-build-script.html
I am used to the layout provided by the Dynamic Web project in eclipse where you have all your Java code under the src folder, your JSP files, etc under the WebContent folder and the WEB-INF resides right under the WebContent folder. Also, the Output folder is hidden from the project tree. Maven has its own format which I find somewhat confusing, it creates its now target folder and source/main/java folder and some test folder under target...
Is there a way to create a Maven project and have it use the Dynamic Web project project tree layout?
I tried changing the Deployment Assembly entries to match that of the Dynamic web project and have also update the Java Build Path src and output to match the Dynamic Web project one but I get strange, cryptic unfriendly errors when I do a Run/Install. Can you provide me with details on how to go about doing this cleanly?
What you need to get used to using is the concept of archetypes in Maven.
The concept is like project templates ready for you to use that are automatically understood by Maven.
mvn archetype:generate
will get you an interactive listing of all the available archetypes
What you want to look for is maven-archetype-webapp this will give you a basic skeleton framework of what Maven is expecting a webapp to look like.
There are others that include support for different frameworks and what not.
mvn archetype:generate | grep webapp
will filter out all the choices that are webapp archetypes
Then it is a simple mvn clean package and you get an exploded dir and a .war in the target directory, you can even enable the Tomcat plugin to automatically deploy to Tomcat. Other J2EE servers are supported as well.
Then you use the Maven plugin for eclipse to load the project based on the pom.xml file.
You could create your own non standard layout and get it working by manually configuring everything thing and create an archetype out of it but that kind of defeats the purpose of a single way of doing things with a tool like Maven.
Using m2e 1.3+ and m2e-wtp 0.16.0+, you can just :
create a new Dynamic Web project
right-click on the project > Configure > Convert to Maven...
Fill in the Maven coordinates of your project and finish
It'll mavenize your project, keeping the standard Eclipse project layout.
See http://wiki.eclipse.org/M2E-WTP/New_and_Noteworthy/0.16#New_project_conversion_participants for more information