Java EE 7 is out... and one day will come Java EE 8, 9 and so on. So we should be able to ask JBoss Forge to either generate a Java EE 6 or 7 application... and if we want to be more precise, you could even go into choosing from Java EE 6, Web Profile 6, Java EE 7 and a Web Profile 7 application. But how to choose a version with JBoss Forge ?
Today, with JBoss Forge 1.x, you create a project with a CLI without giving any version indication :
Then, when you setup your project, you give Forge some hints :
If the idea is to use Forge to create Java EE applications running in a container (and not just in standalone Java SE), the CLI to create a project misses some information, and the setup is redundant. I would think of something like :
Note that I didn't put the version of GlassFish because the version of Java EE implies the version of GlassFish (eg. Java EE 6 == GlassFish 3, Java EE 7 == GlassFish 4). But note that you could also specify the container if needed (e.g. generate a Java EE 6 app running on GlassFish 4)
And, of course, the following would be illegal (GF 3 cannot run a Java EE 7 app) :
On this comment, Lincoln says that the application should only depend on Java EE APIs. So I think the pom.xml should only contain one of the following dependency (depending on the version of Java EE 7) :
You do not need any extra dependency if you want an application to depend only on Java EE. So that means the following commands can also be changed from :
No need to specify the provider. That's because you will use the JPA/Bean Validation/... default implementation of the container (GlassFish uses EclipseLink, JBoss uses Hibernate...). And to ease the configuration and portability, this means that you don't need the <provider> element in the persistence.xml :
Nor do you use the <default-provider> element in the validation.xml (and so on).
I think the Java EE version should be specified when the project is created, and then all the setups would use the default container implementation.