Java/Wicket:使用参考资料编译基本Hello World
下面是Hello World Wicket应用程序的示例 特别是,我将Java/Wicket:使用参考资料编译基本Hello World,java,maven,wicket,Java,Maven,Wicket,下面是Hello World Wicket应用程序的示例 特别是,我将HelloWorld.html放在HelloWorld.java旁边的源代码目录中 我的文件结构如下所示: $ tree . ├── pom.xml ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── example │ │ │ └── wicket │ │ │
HelloWorld.html
放在HelloWorld.java
旁边的源代码目录中
我的文件结构如下所示:
$ 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
但是,当我将其编译为war文件并加载到Jetty中时,我在浏览器中收到以下错误:
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)
当我查看war文件时,我注意到html文件丢失:
$ 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
如何在POM文件中指定包含html文件
我现在的POM是最小的:
<?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>
4.0.0
威克斯特
威克斯特
1.0-快照
战争
org.apache.wicket
导叶芯
6.10.0
您应该将您的HelloWorld.html
文件放入src/main/webapp
文件夹中。通过这种方式,它将包含在war文件中。如果您希望将HTML放在wicket最佳实践位置(与您的类一起),解决方案是将其添加到pom的构建部分
<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>
假的
src/main/resources
假的
src/main/java
**
**/*.爪哇
如果使用Maven,请参阅David Williams的答案。如果使用Gradle,请参见此答案
在build.gradle
文件中包括以下内容:
sourceSets {
main {
resources {
srcDirs += ['src/main/java']
includes = ["**"]
// or specifically: includes = ["**/*.html"]
}
}
}
这将确保HTML文件将添加到WAR文件。为什么不使用从提供的快速启动生成器?然后,您将从工作应用程序中获得一个粘贴。至少你可以用自己制作的pom.xml将pom.xml与快速入门区别开来。谢谢,这让我得到了你提到的解决方案。毫无疑问,这会起作用,但大卫·威廉姆斯的答案更好,因为它遵循了Wicket最佳实践。遵循哪种最佳实践始终是一种权衡。我的答案是考虑maven的最佳实践。不仅是在src/main/webapp目录中,而且在src/main/webapp/com/example/wicket中。在war中嵌入HTML对大多数应用程序都有好处,但wicket最棒的一点是,您可以控制布局甚至组件的组成(请参阅createComponent方法)在运行时,只需更改HTML即可。为此,您希望将标记存储在war文件之外,以避免每次更改标记时都必须重新构建和重新部署应用程序。我们已经建立了一个大型CMS,Wicket使用这种方法。很好的解释。为什么要停用对
src/main/resources
的筛选?