Maven 2 为jetty定义依赖关系的干法:运行和部署
我将结束一个web项目的构建,该项目支持两种运行方式:Maven 2 为jetty定义依赖关系的干法:运行和部署,maven-2,jetty,Maven 2,Jetty,我将结束一个web项目的构建,该项目支持两种运行方式: 本地使用mvn码头运行 部署在应用服务器上 对于应用程序服务器,许多库被标记为提供的,否则会发生类路径冲突。同时,我将这些依赖项重新声明为jetty maven插件的编译依赖项,因为否则目标无法正常运行 构建是这样工作的,但是我有大量重复的库。有没有更干净的方法呢?好吧,总是有wicket解决方案的。(它与wicket没有任何关系,但可以在中找到。) 使用以编程方式启动jetty的主类,并将项目作为webapp上下文。这应该能够获取所有
- 本地使用
李>mvn码头运行
- 部署在应用服务器上
提供的
,否则会发生类路径冲突。同时,我将这些依赖项重新声明为jetty maven插件的编译依赖项
,因为否则目标无法正常运行
构建是这样工作的,但是我有大量重复的库。有没有更干净的方法呢?好吧,总是有wicket解决方案的。(它与wicket没有任何关系,但可以在中找到。) 使用以编程方式启动jetty的主类,并将项目作为webapp上下文。这应该能够获取所有maven依赖项,即使在所有主要IDE上提供的范围内也是如此。下面是这样一节课:
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作为附加的依赖项:
<!-- 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>
org.mortbay.jetty
码头
${jetty.version}
假如
org.mortbay.jetty
码头
${jetty.version}
假如
我不是说这是最好的解决方案,但这样做怎么样:
默认依赖项将提供的依赖项列为“已提供”。默认项目配置应生成WAR文件,这些文件将在非Jetty服务器上运行
定义概要文件“jetty”,并在编译范围内重新声明提供的依赖项。然后运行mvn-Pjetty jetty:run
它可能不是世界上最干净的解决方案,因为它会强制执行一些重复操作,但它应该可以为您完成任务。我还希望在运行Jetty时能够使用某种标志来包含提供的范围内的依赖项。实际上,Jetty已经有了一个类似的方法来测试范围内的依赖项(在这种情况下为什么不包括提供的
依赖项),以避免在概要文件中重复依赖项。这是由具有此标志的修补程序的系统跟踪的。为了跟进此问题,已将其合并,以便您可以小心地添加一个true
。这将包括提供的对jetty插件类路径的依赖项
关于使用此选项可能带来的潜在问题的详细信息,值得一读。有趣的是,我会看一看。+1因为它有效,而不是因为干燥:)但不知怎的,我想知道为什么在使用该标志时不添加提供的依赖项。这听起来不会错的,伊姆霍。帕斯卡说的:-)。它包含与当前解决方案大致相同的副本,因此我不太愿意更改它。类路径引用是一个好主意(+1)