为什么普通的java项目没有META-INF,只有web项目中才会有.

为什么普通的java项目没有META-INF,只有web项目中才会有.,第1张

META-INF里面的信息主要是,描述版本号、classpath、入口类、jdk版本等信息,基本上我们关注的主要是jdk版本(防止出现major52等报错)和入口类(可执行的jar需要有)

所以普通的Jar项目,如果你不导出可执行jar包的时候,是不会生成META-INF信息的

而对于WEB项目,基本上我们不会对META-INF做什么管理甚至都不会关注,因为classpath我们会配置好,java web开发(可以了解一下基础)过程中项目也不存在所谓的入口类,但是如果你需要通过JNDI的方式访问数据库,有可能会有一些配置文件放在里面,但这种方式现在很少用了

部署在Tomcat中的webapps目录下的程序要使用数据源,可以直接修改

%tomcat%/conf/server.xml中的<context>,在这个标签下增加:

<Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource"/>...

这样webapps目录下的程序都可以使用由Tomcat指定的数据源。

你这种在web应用目录下面的app/META-INF/context.xml文件中添加数据源配置是一样的,最终都是由Tomcat来处理。但是Tomcat5.0及之前的版本和5.0之后的版本的数据源配置文件是不一样的,所以需要根据版本使用不同的XML配置格式

JBoss是集成Tomcat的,使用不论是Tomcat和JBoss,其基本功能都是一样的!所以都会对你配置的appMETA-INF/context.xml文件进行解析。。

不过需要注意不同的JBoss版本集成的Tomcat版本也不同,你可以在你安装的JBoss的说明文件中找到其集成的Tomcat版本,在Jboss官网上也可以找到。

因此如果你本地使用的是tomcat6.0,那么最好使用集成tomcat6.0的JBoss.

对于其它的应用服务器,如Weblogic,webspare等都有自已的数据源文件配置格式,所以是不能通用的。

找到这里就是因为我想获取一个 Instrumentation 实例, 但又不知道更优雅的方法,参见下面的代码。谁有更简洁的方法,请跟贴!

如何获取 instrumentation 实例:

package com.taotling.instrument.insance

import java.lang.instrument.Instrumentation

public class MyJVMTIAgent {

    public static Instrumentation instrumentation

    public static void premain(String agentArgs, Instrumentation inst){

        instrumentation = inst

    }

    public static Instrumentation getInstrumentation() {

        return instrumentation

    }

}

将上面的代码打为JAR包,比如我取名为 agent.jar, 添加 META-INF/MANIFEST.MF, 内容为:

Manifest-Version: 1.0

Premain-Class: com.taotling.instrument.insance.MyJVMTIAgent

然后在你要调用 Instrumentation 实例的类比如 Test 类, 通过 -javaagent VM 选项使用这个上面的JAR包:

java -javaagent:"F:\test\myagent.jar" Test

Test 类代码

import com.taotling.instrument.insance.MyJVMTIAgent

import java.lang.instrument.Instrumentation

public class Test {

  public static void main(String[] args) throws InterruptedException {

  Instrumentation instrumentation = MyJVMTIAgent.getInstrumentation()

  System.out.println("instrumentation instance : " + instrumentation)

  System.out.println("the size of empty Object instance is " + instrumentation.getObjectSize(new Object()) + " bytes. ")

  

    }

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11379967.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存