2013-08-22 4 views
7

Ich folge diesem Beispiel einer Hallo Welt Wicket AnwendungJava/Wicket: Kompilieren Grund Hallo Welt mit Ressourcen

https://www.ibm.com/developerworks/web/library/wa-aj-wicket/

Insbesondere ich HelloWorld.html in meinem Quellverzeichnis neben HelloWorld.java platziert.

Meine Dateistruktur sieht wie folgt aus:

$ tree 
. 
├── pom.xml 
├── src 
│   ├── main 
│   │   ├── java 
│   │   │   └── com 
│   │   │    └── example 
│   │   │     └── wicket 
│   │   │      ├── HelloWorld.html 
│   │   │      ├── HelloWorld.java 
│   │   │      └── HelloWorldApplication.java 
│   │   ├── resources 
│   │   └── webapp 
│   │    └── WEB-INF 
│   │     └── web.xml 
│   └── test 
│    └── java 
└── wicketTest.iml 

Jedoch, wenn ich diese Datei in einen Krieg zu kompilieren, und die Last in Jetty, i empfangen diesen Fehler im Browser:

Unexpected RuntimeException 

Last cause: Can not determine Markup. Component is not yet connected to a parent. [Page class = com.example.wicket.HelloWorld, id = 4, render count = 1] 

Stacktrace 

Root cause: 

org.apache.wicket.markup.MarkupNotFoundException: Can not determine Markup. Component is not yet connected to a parent. [Page class = com.example.wicket.HelloWorld, id = 4, render count = 1] 
    at org.apache.wicket.Component.getMarkup(Component.java:737) 
    at org.apache.wicket.Component.internalRender(Component.java:2344) 
    at org.apache.wicket.Component.render(Component.java:2307) 
    at org.apache.wicket.Page.renderPage(Page.java:1010) 

Wenn ich sehe in der wAR-Datei ich feststellen, dass die hTML-Datei fehlt:

$ tar tvf target/wicketTest-1.0-SNAPSHOT.war 
drwxrwxrwx 0 0  0   0 Aug 22 14:50 META-INF/ 
-rwxrwxrwx 0 0  0   128 Aug 22 14:50 META-INF/MANIFEST.MF 
drwxrwxrwx 0 0  0   0 Aug 22 14:50 WEB-INF/ 
drwxrwxrwx 0 0  0   0 Aug 22 14:50 WEB-INF/classes/ 
drwxrwxrwx 0 0  0   0 Aug 22 14:50 WEB-INF/classes/com/ 
drwxrwxrwx 0 0  0   0 Aug 22 14:50 WEB-INF/classes/com/example/ 
drwxrwxrwx 0 0  0   0 Aug 22 14:50 WEB-INF/classes/com/example/wicket/ 
drwxrwxrwx 0 0  0   0 Aug 22 14:50 WEB-INF/lib/ 
-rwxrwxrwx 0 0  0   608 Aug 22 14:50 WEB-INF/classes/com/example/wicket/HelloWorld.class 
-rwxrwxrwx 0 0  0   551 Aug 22 14:50 WEB-INF/classes/com/example/wicket/HelloWorldApplication.class 
-rwxrwxrwx 0 0  0  25962 Aug 21 16:07 WEB-INF/lib/slf4j-api-1.6.4.jar 
-rwxrwxrwx 0 0  0  2126440 Aug 21 16:07 WEB-INF/lib/wicket-core-6.10.0.jar 
-rwxrwxrwx 0 0  0  86671 Aug 21 16:07 WEB-INF/lib/wicket-request-6.10.0.jar 
-rwxrwxrwx 0 0  0  415858 Aug 21 16:07 WEB-INF/lib/wicket-util-6.10.0.jar 
-rwxrwxrwx 0 0  0   690 Aug 22 13:22 WEB-INF/web.xml 
drwxrwxrwx 0 0  0   0 Aug 22 14:50 META-INF/maven/ 
drwxrwxrwx 0 0  0   0 Aug 22 14:50 META-INF/maven/wicketTest/ 
drwxrwxrwx 0 0  0   0 Aug 22 14:50 META-INF/maven/wicketTest/wicketTest/ 
-rwxrwxrwx 0 0  0   675 Aug 22 08:52 META-INF/maven/wicketTest/wicketTest/pom.xml 
-rwxrwxrwx 0 0  0   112 Aug 22 14:50 META-INF/maven/wicketTest/wicketTest/pom.properties 

Wie ich in meinem POM fil spezifiziere e, um die HTML-Datei einzuschließen?

Mein POM jetzt ist minimal:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>wicketTest</groupId> 
    <artifactId>wicketTest</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <dependencies> 
     <dependency> 
      <groupId>org.apache.wicket</groupId> 
      <artifactId>wicket-core</artifactId> 
      <version>6.10.0</version> 
     </dependency> 
    </dependencies> 
</project> 
+3

Warum nicht einfach den von http://wicket.apache.org/start/quickstart.html verfügbaren Schnellstartgenerator verwenden? Sie sind dann eine Paste weg von einer funktionierenden Anwendung. Zumindest können Sie die pom.xml mit der von Ihnen erstellten pom.xml aus dem Schnellstart entfernen. –

+0

Danke, das hat mir die Lösung gebracht, wie Sie erwähnt haben. Posted unten. –

Antwort

17

Die Lösung, wenn Sie Ihre HTML in der Wicket Best Practice-Ort (mit Ihren Klassen) möchten, ist es, um den Build-Abschnitt Ihres Pom hinzuzufügen.

<build> 
    <resources> 
     <resource> 
      <filtering>false</filtering> 
      <directory>src/main/resources</directory> 
     </resource> 
     <resource> 
      <filtering>false</filtering> 
      <directory>src/main/java</directory> 
      <includes> 
       <include>**</include> 
      </includes> 
      <excludes> 
       <exclude>**/*.java</exclude> 
      </excludes> 
     </resource> 
    </resources> 
</build> 
</project> 
+0

gute Erklärung. Warum haben Sie die Filterung für 'src/main/resources' deaktiviert? – JimHawkins

1

Sie sollten Sie HelloWorld.html Datei in src/main/webapp Ordner. Auf diese Weise wird es in der Kriegsdatei enthalten

+0

Um zu akzeptieren, können Sie genauer über den Pfad sein? –

+0

aktualisiert die Antwort – WeMakeSoftware

+0

Kein Zweifel, das würde funktionieren, aber die Antwort von David Williams ist besser, da es Wicket Best Practices folgt. – iluwatar