[MAVEN]web工程的调试

本文介绍了如何在使用Maven管理的Web工程中,通过手动添加jar到classpath进行调试,以及如何配置Tomcat启动以支持运行Maven生成的WAR包。详细步骤包括定义Tomcat配置文件、编写启动类来设置环境变量,并在DebugConfigurations中配置启动参数以实现方便的本地调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

接上篇:[MAVEN]maven最佳实践 

maven风格的WEB程序怎样调试?

 

标准web目录结构

src/main/java

Application/Library sources

src/main/resources

Application/Library resources

src/main/filters

Resource filter files

src/main/assembly

Assembly descriptors

src/main/config

Configuration files

src/main/scripts

Application/Library scripts

src/main/webapp

Web application sources

src/test/java

Test sources

src/test/resources

Test resources

src/test/filters

Test resource filter files

src/site

Site

LICENSE.txt

Project's license

NOTICE.txt

Notices and attributions required by libraries that the project depends on

README.txt

Project's readme

 

web项目调试最佳实践

  • 问题,jar都让maven管理了,web-inf/lib下没有jar了,这个时候怎样调试web呢?
  • 原理:无论tomcat还是jetty作为web容器,最终启动他们的命令行都是:“java ....” 即他们都是标准的java应用程序启动方式,所以对于maven管理的web工程,手动添加jar到classpath即可了

编程方式使用tomcat调试maven war工程

 

  1. 定义tomcat配置文件:src/test/resources/tomcat.properties
    catalina.home=/prog/apache/apache-tomcat-7.0.27-dev
    catalina.base=/workspace/com.talkyun.flex/Servers/dev-cloud-site
     
  2. TomcatStart.java启动代码:src/test/java/server/TomcatStart.java
    package server;
    
    import java.io.IOException;
    import java.lang.reflect.Method;
    import java.net.URL;
    import java.net.URLClassLoader;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.util.Properties;
    
    /** 启动tomcat */
    public class TomcatStart {
    	
    	/** 设置tomcat启动需要的classpath、catalina.home和catalina.base设置 */
    	private static void setTomcatEnv(Properties tomcatConfig) throws ReflectiveOperationException, IOException {
    		String catalinaHome = tomcatConfig.getProperty("catalina.home");
    		System.setProperty("catalina.home", catalinaHome);
    		System.setProperty("catalina.base", tomcatConfig.getProperty("catalina.base", catalinaHome));
    		
    		
    		Path bootstrapJar =  Paths.get(catalinaHome, "bin/bootstrap.jar"), tomcatJuliJar = bootstrapJar.resolveSibling("tomcat-juli.jar");
    		ClassLoader classloader = Thread.currentThread().getContextClassLoader();
    		Method addURLMethod = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
    		try {
    			addURLMethod.setAccessible(true);
    			addURLMethod.invoke(classloader, bootstrapJar.toUri().toURL());
    			addURLMethod.invoke(classloader, tomcatJuliJar.toUri().toURL());
    			try {
    				classloader.loadClass("javax.servlet.ServletContainerInitializer");
    			} catch (ClassNotFoundException e) {
    				addURLMethod.invoke(classloader, Paths.get(catalinaHome, "lib/servlet-api.jar").toUri().toURL());
    			}
    		} finally {
    			addURLMethod.setAccessible(false);
    		}
    	}
    	
    	/** 启动tomcat */
    	private static void start() throws ReflectiveOperationException {
    		Class<?> bootstrapClazz = Class.forName("org.apache.catalina.startup.Bootstrap");
    		Method main = bootstrapClazz.getDeclaredMethod("main", String[].class);
    		main.invoke(bootstrapClazz, (Object) new String[] {"start"});
    	}
    
    	/** 请在 classpath:/tomcat.properties中设定: catalina.home, catalina.base(默认使用catalina.home) */
    	public static void main(String[] args) throws Exception {
    		Properties tomcatConfig = new Properties();
    		tomcatConfig.load(TomcatStart.class.getResourceAsStream("/tomcat.properties"));
    		
    		setTomcatEnv(tomcatConfig);
    		start();
    	}
    
    }
    
     

 

 

tomcat调试maven web工程

  1. 定义Variable变量
    1. 打开首选项:Windows->Preferences

    2. 定义变量:Run/Debug -> String Substitution:选择右边的新建,建立变量,名称:TOMCAT_HOME,配置为tomcat的路径,如图:

  2. 定义一个java application debug启动:
    1. 打开Debug Configurations配置:Run -> Debug Configurations

    2. 选择左边的Java Application,右键新建一个新的Java Application启动配置:取名为:tomcat-dev
      1. Main选项卡:Main class输入:org.apache.catalina.startup.Bootstrap


         

      2. Arguments选项卡:
        • Program arguments配置填写:start

        • VM arguments配置填写:
          • -Dcatalina.home=${TOMCAT_HOME}
            -Dcatalina.base=${TOMCAT_HOME}
            -Djava.endorsed.dirs=${TOMCAT_HOME}/common/endorsed 
            -Djava.io.tmpdir=${TOMCAT_HOME}/temp 
            -Djava.library.path=${TOMCAT_HOME}/bin:/usr/local/apr/lib 
            -Dsun.io.useCanonCaches=false 
            -server
            

             
        • Working directory配置填写:Other: ${TOMCAT_HOME}

      3. Classpath选项卡:
        • 去掉项目的classpath,只保留Maven Dependencies项即可
        • 选中User Entries:按右边的Advanced添加三个jar包,如:在弹出的Advanced Options对话框中填写Add Variable String项目:${TOMCAT_HOME}/bin/bootstrap.jar

          • ${TOMCAT_HOME}/bin/bootstrap.jar
            ${TOMCAT_HOME}/bin/tomcat-juli.jar
            ${TOMCAT_HOME}/lib/servlet-api.jar
            

             

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值