Quantcast
Channel: wicket praxis » resource
Viewing all articles
Browse latest Browse all 3

Wicket Tipps: Markup

$
0
0

Ich benutze für alle Projekte Maven. Der eine oder andere mag mit Maven auf dem Kriegsfuß stehen (was ich zwar nicht verstehe, aber akzeptiere). Bisher war ich (und an anderer Stelle war es auch nicht notwendig, darüber nachzudenken) für eine saubere Trennung von Code und Resourcen. Das bedeutet z.B. das der Code einer Wicket-Komponente z.B. im Pfad src/main/java/de/wicketpraxis/ zu finden ist und das Markup in src/main/resources/de/wicketpraxis.

Das Projekt wächst und gedeiht und es entstehen unzählige Komponenten (ein Zeichen dafür, dass man mit Wicket sehr sehr einfach eigene Komponenten erstellen kann).  Im Laufe der Zeit hat es sich als unpraktisch herausgestellt, in der IDE immer zwischen diesen beiden Verzeichnissen zu wechseln. Auch beim Refactoring kann es sich als lästig erweisen, weil man an zwei Stellen die selbe Operation anwenden muss (zumindest in Eclipse).

Ich habe daher alle Projekte umgestellt und kann nun die Markup-Dateien in das selbe Verzeichnis/Package wie die Komponente legen. Die Angst, dass die Übersichtlichkeit leidet, hat sich als unbegründet erwiesen, die Produktivität ist spürbar besser. Folgende Anpassung muss man daher in einem Projekt vornehmen. In der pom.xml ist folgender Block einzufügen:

  1.   <build>
  2. ...
  3.     <resources>
  4.       <resource>
  5.         <directory>src/main/resources</directory>
  6.       </resource>
  7.       <resource>
  8.         <directory>src/main/java</directory>
  9.         <excludes>
  10.           <exclude>**/*.java</exclude>
  11.         </excludes>
  12.       </resource>
  13.     </resources>
  14. ...
  15.   </build>

Wenn man nun die Anwendung über Jetty aus dem Projekt heraus starten möchte, empfiehlt sich ein Ansatz, den ich bereits im folgenden Beitrag erwähnt habe: Wicket Resourcen mit Jetty nachladen. Allerdings müssen wir dazu den angepassten ResourceStreamLocator entsprechend erweitern. Am besten wir schreiben eine neue Klasse:

  1. package de.wicketpraxis.wicket.util.resource;
  2. import org.apache.wicket.util.file.File;
  3. import org.apache.wicket.util.resource.FileResourceStream;
  4. import org.apache.wicket.util.resource.IResourceStream;
  5. import org.apache.wicket.util.resource.locator.ResourceStreamLocator;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8. public class MavenDevResourceAndSourceStreamLocator extends ResourceStreamLocator
  9. {
  10.   private static final Logger _logger = LoggerFactory.getLogger(MavenDevResourceAndSourceStreamLocator.class);
  11.   
  12.   final static String MAVEN_RESOURCE_PATH="src/main/resources/";
  13.   final static String MAVEN_JAVASOURCE_PATH="src/main/java/";
  14.   
  15.   @Override
  16.   public IResourceStream locate(final Class<?> clazz, final String path)
  17.   {
  18.     IResourceStream located=getFileSysResourceStream(MAVEN_RESOURCE_PATH,path);
  19.     if (located==null)
  20.     {
  21.       located=getFileSysResourceStream(MAVEN_JAVASOURCE_PATH,path);
  22.     }
  23.     if (located != null)
  24.     {
  25.       if (_logger.isInfoEnabled()) _logger.info("Locate: " + clazz + " in " + path+" -> "+located);
  26.       return located;
  27.     }
  28.     located=super.locate(clazz, path);
  29.     if (_logger.isInfoEnabled()) _logger.info("Locate: " + clazz + " in " + path+" -> "+located+"(Fallback)");    
  30.     return located;
  31.   }
  32.   private static IResourceStream getFileSysResourceStream(String prefix, String path)
  33.   {
  34.     File f=new File(prefix+path);
  35.     if ((f.exists()) && (f.isFile()))
  36.     {
  37.       return new FileResourceStream(f);
  38.     }
  39.     return null;
  40.   }
  41. }

Die Einbindung funktioniert wie beim letzten Mal:

  1. if (DEVELOPMENT.equalsIgnoreCase(configurationType))
  2. {
  3.   getResourceSettings().setResourceStreamLocator(new MavenDevResourceAndSourceStreamLocator());
  4. }

Jetzt sollte man (wenn alles andere entsprechend vorbereitet ist) mit mvn jetty:run -Dwicket.configuration=development Jetty aus dem Projekt heraus starten können. Sobald man Änderungen am Markup vorgenommen hat, werden diese neu geladen.


Viewing all articles
Browse latest Browse all 3

Latest Images

Pangarap Quotes

Pangarap Quotes

Vimeo 10.7.0 by Vimeo.com, Inc.

Vimeo 10.7.0 by Vimeo.com, Inc.

HANGAD

HANGAD

MAKAKAALAM

MAKAKAALAM

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Trending Articles


Libros para colorear


Girasoles para colorear


Conejos para colorear


Dibujos para colorear de perros


Dromedario para colorear


People Walk Away Quotes, Inspire Quotes


Patama and Selos Quotes Tagalog


RE: Mutton Pies (mely)


Ang Nobela sa “From Darna to ZsaZsa Zaturnnah: Desire and Fantasy, Essays on...


Amarula African Gin





Latest Images

Pangarap Quotes

Pangarap Quotes

Vimeo 10.7.0 by Vimeo.com, Inc.

Vimeo 10.7.0 by Vimeo.com, Inc.

HANGAD

HANGAD

MAKAKAALAM

MAKAKAALAM

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC