My name is Vasyl Khrystiuk‎ > ‎process‎ > ‎main‎ > ‎

spring maven archetype

// TODO: add jetty plugin and maven compiller source version
// adn encoding option(UTF-8)
I tired out to create new project and every time make stupid sequence:

spring maven sequence


So i decide to create own set of maven archetypes:
1) simple-webapp
  • no spring
  • servlet
  • jsp+JSTL
mvn archetype:generate -DarchetypeGroupId=net.sinistersky.j2ee -DarchetypeArtifactId=simple-webapp-archetype -DarchetypeVersion=0.0.1 -DarchetypeRepository=http://msangelrepo.googlecode.com/svn/maven/repo/

2) simple-webapp-tiles
  • no spring
  • apache tiles

Аpache tiles стали де-факто стандартным шаблонизатором при построении сайтов на яве. Лично на моей практике у меня было всего несколько проектов, где их не использовали. 
Если говорить о версиях Аpache tiles, то первая основательно устарела и используется внутри Struts 1.x framework. Но и он на сегодня вытеснен как минимум своей новой версией - Struts2 framework.
Вторая версия достаточна хороша и как правило именно она использовась в проектах. Так например, один из моих следующих в списке архитайп(simple-webapp-springmvc-tiles) использует имеенно вторую версию.
Этот же пример использует 3. Различия есть, но они не такие большие. И в общем счете струкрута конфигурация осталась той же самой, библиотека тегов тоже не изменилась. 
Стартануть можно там: https://tiles.apache.org/framework/getting_started.html
Конкретный этот архитайп имеет три способа рендеринга:
  1. С помощью стандартного сервлета TilesDispatchServlet
  2. С помощью библиотеки тегов в JSP: <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
  3. Напрямую из собственного сервлета. 
По поводу инициализациии Tiles в приложении - её можно сделать разными способами. Для простых конфиругаций в второй версии существует SimpleTilesListener, который я и использовал. Его можно унаследовать и именить базовую конфигурацию под себя(скорей всего прийдется унаследовать и изменить несколько классов, но в целом кода писать там мало и никакой логики по идеи не должно быть, кроме конфигураций). 
В Tiles 3.x же появился новый инициалайзер CompleteAutoloadTilesListener, который, впрочем, имеет как преимущества(из под коробки умеет работать со многими шаблонизаторами и языками выражений) так и недостатки(для поддержки всех необходимых функций этот инициалайзер за собой тащит все библиотеки, в том числе и spring). 
И да, в качестве наполнения веб-приложения я использую шаблон простого сайта, который я скачал в одном из обсуждений йцуйцу, внутри нет никаких данных об авторстве шаблона. Так что верстку делал не я. 
И еще раз об зависимостях: можно включить все(tiles-extras), можно только необходимый минимум(tiles-jsp). В Первом случае кроме стандартных средств для работы с сервлетами и JSP мы еще и получим: 
  • tiles-request-servlet-wildcard - намного расширяет функциональность, позволяя использовать wildcard селекторы в путях к шаблонах, а еще эта либа за собой тащит спринг
  • tiles-request-mustache - поддержка шаблонизатора mustache 
  • tiles-velocity - поддержка шаблонизатора velocity
  • tiles-el - поддержка el прямо внутри строк шаблонов, и вообще наверное годная фича, к тому же ничего за собой не тянет
  • tiles-mvel - поддержка языка выражений MVEL
  • tiles-ognl - поддержка языка выражений ognl
  • tiles-compat - библиотека для совместимости со старым Struts
Но я всего в всем этом не нуждаюсь, потому я просто использовал tiles-jsp


Хочется так же обратить внимание на 
который является наследником
Там много чего полезного и нечто я даже использовал в этом архитайпе.
еще по препейреру:
http://coderlearner.com/Java_Tiles_ViewPreparer
https://tiles.apache.org/framework/tutorial/advanced/preparer.html
второй параметр тоже крут, мы можем устанавливать дефинишину аттрибуты

еще есть wildcard support
даже более того, в екстра пакете есть поддержка регекспов, которые оттуда можно смело скопировать(или правильней сказать - удалить оттуда все ненужное, ибо сами класы резолверы как раз в стандартном пакете):
CompleteAutoloadTilesContainerFactory
более того, написать собственный резолвер не представляет проблем
например, можно иметь разные дефинишены для разных http-методов, но одного и того же урла


вообще, много чего


а еще есть фильтр для вывода страниц через него
есть поддержка локализации, но это уже другой вопрос

а еще есть непонятная хрень с рендерингом, суть которой сводится к тому, что можно изменить поведение стандпртных ренднров атрибутов или добавить собственные (как по мне - это какая-то хрень)
https://tiles.apache.org/framework/tutorial/advanced/attribute-rendering.html

а еще можно иметь несколько тайлз контейнеров( полезно при модульном создании приложений)
https://tiles.apache.org/framework/tutorial/advanced/multiple-containers.html


еще есть поддержка секюрити:
https://tiles.apache.org/framework/tutorial/advanced/security.html
но (мне) совсем не понятно, что это  за роли и откуда они (быстрая навигация по коду сказала, что как минимум в одном случае это стандартноя система ролей из стека j2ee )

Сделать еще версии с поддержкой безопасности(нужно ли?) и локализацией(какую модель?)


mvn archetype:generate -DarchetypeGroupId=net.sinistersky.j2ee -DarchetypeArtifactId=simple-webapp-tiles-archetype -DarchetypeVersion=0.0.1-SNAPSHOT -DarchetypeRepository=http://msangelrepo.googlecode.com/svn/maven/repo/

3) simple-webapp-springmvc
  • spring di(xml)
  • spring mvc
mvn archetype:generate -DarchetypeGroupId=net.sinistersky.j2ee -DarchetypeArtifactId=simple-spring-mvc-archetype -DarchetypeVersion=0.0.1 -DarchetypeRepository=http://msangelrepo.googlecode.com/svn/maven/repo/

4) simple-webapp-springmvc-tiles
  • spring di(xml)
  • spring mvc
  • apache tiles
mvn archetype:generate -DarchetypeGroupId=net.sinistersky.j2ee -DarchetypeArtifactId=simple-webapp-springmvc-tiles -DarchetypeVersion=0.0.1-SNAPSHOT -DarchetypeRepository=http://msangelrepo.googlecode.com/svn/maven/snapshot-repo/

5) simple-webapp-springmvc-tiles-hsqldb
  • spring di(xml)
  • spring mvc
  • apache tiles
  • domain core (hibernate.cfg.xml + hsqldb)
5) simple-webapp-springmvc-tiles-hsqldb-security
  • spring di(xml)
  • spring mvc
  • apache tiles
  • domain core (hibernate.cfg.xml + hsqldb)
  • spring security(hsqldb as user storage)
6) simple-webapp-springmvc-tiles-mongodb-security
  • spring di(xml)
  • spring mvc
  • apache tiles
  • domain core (hibernate.cfg.xml + mongodb-morphia)
  • spring security(mongodbas user storage)

All this archetype will have correct configurated web.xml, log4j.properties, environment.properties(main config file) etc.
Base package is net.sinistersky.j2ee.simple

Ok, first project done.
Now need to create archetype based on project.
1) run "mvn archetype:create-from-project" in folder with simple project
2) in "/target/generated-sources/archetype" run "mvn clean"
3) to "/target/generated-sources/archetype/src/main/resources/META-INF/maven/archetype-metadata.xml" add this code:
<archetype-descriptor ...>
	<requiredProperties>
		<requiredProperty key="groupId">
			<defaultValue>net.sinistersky</defaultValue>
		</requiredProperty>
		<requiredProperty key="artifactId"/>
		<requiredProperty key="version">
			<defaultValue>0.0.1-SNAPSHOT</defaultValue>
		</requiredProperty>
		<requiredProperty key="package">
			<defaultValue>net.sinistersky.j2ee.simple</defaultValue>
		</requiredProperty>
	</requiredProperties>
and remove from file list garbage files(eclipse project files)(from file system remove to)
4) from "/target/generated-sources/archetype/" run "mvn install"
5) now for testing create empty project with this command: "mvn archetype:generate -DarchetypeCatalog=local"

Archetype created. Now we need to share it. I already have repository for sharing on google code.
More about here: 1, 2, 3
So steps to reproduce:
1) create project on google code
2) In ~/.m2/settings.xml add credentials for access to server(as for usual deployment):
<settings ...>
...
<server>
    <id>minimal-examples-repository</id>
    <username>your_google_mail@gmail.com</username>
    <password>?????????</password>
  </server>
  <server>
    <id>minimal-examples-snapshot-repository</id>
    <username>your_google_mail@gmail.com</username>
    <password>?????????</password>
  </server>
Where password is GoogleCode.com Password from: https://code.google.com/hosting/settings
3) add maven wagon-svn plugin to "/target/generated-sources/archetype/pom.xml" :
<project ...>
...
  <build>
    <extensions>
      <extension>
	<groupId>org.jvnet.wagon-svn</groupId>
	<artifactId>wagon-svn</artifactId>
	<version>1.9</version>
      </extension>
and for this plugin you will need java.net maven repo:
		<repository>
			<id>java.net</id>
			<name>java.net</name>
			<url>http://download.java.net/maven/2/</url>
		</repository>

	</repositories>
3) add <distributionManagement>:
<distributionManagement>
		<repository>
			<id>minimal-examples-repository</id>
			<name>Maven Repository for minimal-examples</name>
			<url>svn:https://msangelrepo.googlecode.com/svn/maven/repo</url>
		</repository>
		<snapshotRepository>
			<id>minimal-examples-snapshot-repository</id>
			<name>Maven Repository for minimal-examples (snapshot)</name>
			<url>svn:https://msangelrepo.googlecode.com/svn/maven/snapshot-repo</url>
			<uniqueVersion>false</uniqueVersion>
		</snapshotRepository>
	</distributionManagement>
4) Now with command "mvn deploy" your artifact will fly to google

Result of all work:
>mvn archetype:generate -DarchetypeGroupId=net.sinistersky.j2ee -DarchetypeArtifactId=simple-webapp-archetype -DarchetypeVersion=0.0.1 -DarchetypeRepository=http://msangelrepo.googlecode.com/svn/maven/repo/


Another result of work(spring mvc only and logging):
mvn archetype:generate -DarchetypeGroupId=net.sinistersky.j2ee -DarchetypeArtifactId=simple-spring-mvc-archetype -DarchetypeVersion=0.0.1 -DarchetypeRepository=http://msangelrepo.googlecode.com/svn/maven/repo/


About Apache tiles
Tiles has significantly changed a way of initializingfrom version 2.1 to 2.2 (v3 is actually same as 2.2)
Newer version is good and i will use it in future(maybe i should create two different archetypes?) But now I will use 2.1 version.


http://tiles.apache.org/tutorial/advanced/runtime.html


Update:
simple-webapp-springmvc-tiles
work on tiles v 2.2.2

mvn archetype:generate -DarchetypeGroupId=net.sinistersky.j2ee -DarchetypeArtifactId=simple-webapp-springmvc-tiles -DarchetypeVersion=0.0.1-SNAPSHOT -DarchetypeRepository=http://msangelrepo.googlecode.com/svn/maven/snapshot-repo/









Comments