我确实想运行一个主类,它使用我的vaadin应用程序的内容部署jetty服务器。
final Server server = new Server();
final Connector connector = new ServerConnector( server );
(( AbstractNetworkConnector ) connector).setPort( 3131 );
server.setConnectors( new Connector[] { connector } ); //
final WebAppContext webappcontext = new WebAppContext();
final File warFile = new File( "target/avx-gcms-1.0.war" );
webappcontext.setClassLoader( Thread.currentThread().getContextClassLoader() );
webappcontext.setContextPath( "/" );
webappcontext.setWar( warFile.getAbsolutePath() );
server.setHandler( webappcontext );
server.start();
System.out.println( "Jetty started, please go to http://localhost:" + 3131 + "/" );
这是我的主要方法的代码,但是当我运行它时,它可以正常工作但I do get this in m localhost.
这是我的workspace
我已经看到了一些与此相关的问题但它们并没有太大帮助。如果你提前帮忙,谢谢你。
答案 0 :(得分:0)
您可能希望以相反的方式执行此操作:而不是使用war文件,直接将应用程序设置为runnable jar。
你需要将这个主类与你的Vaadin UI类一起放到项目中,并将它直接连接到Jetty:
public static void main(String[] args) {
Server server = new Server(3131);
ServletContextHandler contextHandler
= new ServletContextHandler(ServletContextHandler.SESSIONS);
contextHandler.setContextPath("/");
ServletHolder sh = new ServletHolder(new VaadinServlet());
contextHandler.addServlet(sh, "/*");
contextHandler.setInitParameter("ui", HelloWorldUI.class.getCanonicalName());
server.setHandler(contextHandler);
try {
server.start();
server.join();
} catch (Exception ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
}
然后在maven-shade-plugin
中配置exec-maven-plugin
和pom.xml
以创建可运行的jar文件like in here。
查看that project以获取完整示例,但请注意,设置与外部化静态资源(widgetset和css)略有不同,但您可以跳过该配置。