我正在完成一个支持两种运行方式的Web项目的构建:
mvn jetty-run
; 对于应用程序服务器,许多库都标记为provided
,否则会发生类路径冲突。与此同时,我已将这些依赖项重新声明为jetty-maven-plugin
的编译依赖项,否则目标无法正常运行。
构建工作正常,但我有大量重复的库。有没有更简洁的方法呢?
答案 0 :(得分:3)
只是为了跟进此JETTY-429已合并,因此您可以谨慎添加configuration parameter <useProvidedScope>true</useProvidedScope>
。这将包括 jetty插件类路径所提供的依赖项。
有关使用此选项可能带来的潜在问题的详细信息,请务必阅读JETTY-429。
答案 1 :(得分:2)
总是有wicket解决方案。 (它不需要对wicket做任何事情,但可以在wicket maven archetype中找到。)
使用以类编程方式将jetty作为webapp上下文启动的主类。即使在所有主要IDE的提供范围内,这也应该获取所有maven依赖项。这是一个类:
public class Start{
private static final Logger LOG = Logger.getLogger(Start.class);
public static void main(final String[] args) throws Exception{
LOG.addAppender(new ConsoleAppender(new SimpleLayout(), "system.out"));
final Server server = new Server();
final SocketConnector connector = new SocketConnector();
// Set some timeout options to make debugging easier.
connector.setMaxIdleTime(1000 * 60 * 60);
connector.setSoLingerTime(-1);
connector.setPort(9090);
server.setConnectors(new Connector[] { connector });
final WebAppContext bb = new WebAppContext();
bb.setServer(server);
bb.setContextPath("/");
bb.setWar("src/main/webapp");
server.addHandler(bb);
try{
LOG.info(//
">>> STARTING EMBEDDED JETTY SERVER, PRESS ANY KEY TO STOP" //
);
server.start();
System.in.read();
LOG.info(">>> STOPPING EMBEDDED JETTY SERVER");
server.stop();
server.join();
} catch(final Exception e){
LOG.error("Something bad happened", e);
System.exit(100);
}
}
// CHECKSTYLE:ON
}
好的部分:你可以将它作为标准的eclipse运行配置启动,包括简单的调试。
缺点:你需要jetty作为额外的provided
依赖:
<!-- JETTY DEPENDENCIES FOR TESTING -->
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
<version>${jetty.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>${jetty.version}</version>
<scope>provided</scope>
</dependency>
答案 2 :(得分:2)
我不是说这是最好的解决方案,但是如何做到这一点:
它可能不是世界上最干净的解决方案,因为它会强制重复,但它应该为你完成工作。
答案 3 :(得分:2)
我还想在运行Jetty时能够包含provided
范围内的依赖项。实际上,Jetty已经有useTestClasspath
为test
范围内的依赖项做了类似的事情(为什么在这种情况下不包括provided
依赖项),以避免在配置文件中重复依赖项。这由JETTY-429跟踪,其中包含此类标记的补丁。