Java JAR文件在执行过程中被修改

Java JAR文件在执行过程中被修改,java,hibernate,spring,jar,Java,Hibernate,Spring,Jar,这是在我的程序最后一次运行失败之后。我注意到文件大小已更改,我无法再为我的程序运行Java类: root@dbs01 ~ $ ls -l lifecycle-0.1-SNAPSHOT.jar -rw-r--r-- 1 root root 24740243 Jun 4 20:48 lifecycle-0.1-SNAPSHOT.jar 这是在我复制原始JAR文件的新副本之后: root@dbs01 ~ $ ls -l lifecycle-0.1-SNAPSHOT.jar -r

这是在我的程序最后一次运行失败之后。我注意到文件大小已更改,我无法再为我的程序运行Java类:

root@dbs01 ~
$ ls -l lifecycle-0.1-SNAPSHOT.jar
-rw-r--r--   1 root     root     24740243 Jun  4 20:48 lifecycle-0.1-SNAPSHOT.jar
这是在我复制原始JAR文件的新副本之后:

root@dbs01 ~
$ ls -l lifecycle-0.1-SNAPSHOT.jar
-rw-r--r--   1 root     root     24833475 Jun  4 20:55 lifecycle-0.1-SNAPSHOT.jar
然后运行Java命令:

root@dbs01 ~
$ java -cp lifecycle-0.1-SNAPSHOT.jar com.abc.lifecycle.cli.LifecycleManagerCli -dm web 0001 lm2-dom0.sfbay.abc.com ZONE /path/to/bits
Jun 4, 2009 8:55:51 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@186c6b2: display name [org.springframework.context.support.ClassPathXmlApplicationContext@186c6b2]; startup date [Thu Jun 04 20:55:51 GMT+00:00 2009]; root of context hierarchy
Jun 4, 2009 8:55:51 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [lifecycle_lite.xml]
Jun 4, 2009 8:55:51 PM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
INFO: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@186c6b2]: org.springframework.beans.factory.support.DefaultListableBeanFactory@88e2dd
Jun 4, 2009 8:55:51 PM org.springframework.core.io.support.PropertiesLoaderSupport loadProperties
INFO: Loading properties file from class path resource [lifecycle.properties]
Jun 4, 2009 8:55:51 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@88e2dd: defining beans [org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0,com.abc.lifecycle.util.LoggingConfigurer#0,transactionManager,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,txAdvice,lifecycleOperations,org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0,dataSource,hibernateSessionFactory,moduleDefinitionDao,moduleHostDao,moduleInstanceDao,physicalHostDao,serviceDefinitionDao,serviceInstanceDao,numericOffsetDao,virtualHostDao,broker,jmsConnectionFactory,lifecycleMessageQueue,lifecycleMessageXmlConverter,lifecycleMessageListener,lifecycleMessageListenerContainer,jmsTemplate,lifecycleProcessor,statusChecker,lifecycleComponentBuilder,lifecycleManagerInitializer,lifecycleManagerCli]; root of factory hierarchy
Hibernate:
    insert
    into
        SERVICE_INSTANCE
        (CREATED_DATE, OPTIMISTIC_LOCKING_VERSION, UPDATED_DATE, MODULE_INSTANCE_ID, serviceDefinition_ENTITY_ID)
    values
        (?, ?, ?, ?, ?)
Hibernate:
    delete
    from
        NUMERIC_OFFSET
    where
        ENTITY_ID=?
        and OPTIMISTIC_LOCKING_VERSION=?
Exception in thread "lifecycleMessageListenerContainer-1" java.lang.NoClassDefFoundError: org/springframework/jms/support/JmsUtils
        at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.clearResources(DefaultMessageListenerContainer.java:1024)
        at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:887)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.ClassNotFoundException: org.springframework.jms.support.JmsUtils
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
        ... 3 more
此时,我使用Ctrl-C终止它:

^CException in thread "ActiveMQ ShutdownHook" java.lang.NoClassDefFoundError: org/apache/activemq/broker/TransportConnection$3
        at org.apache.activemq.broker.TransportConnection.stopAsync(TransportConnection.java:920)
        at org.apache.activemq.broker.TransportConnection.stop(TransportConnection.java:902)
        at org.apache.activemq.util.ServiceStopper.stop(ServiceStopper.java:41)
        at org.apache.activemq.broker.TransportConnector.stop(TransportConnector.java:270)
        at org.apache.activemq.util.ServiceSupport.dispose(ServiceSupport.java:43)
        at org.apache.activemq.transport.vm.VMTransportFactory.stopped(VMTransportFactory.java:226)
        at org.apache.activemq.broker.BrokerService.stop(BrokerService.java:518)
        at org.apache.activemq.broker.BrokerService.containerShutdown(BrokerService.java:1754)
        at org.apache.activemq.broker.BrokerService$4.run(BrokerService.java:1732)
Caused by: java.lang.ClassNotFoundException: org.apache.activemq.broker.TransportConnection$3
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
        ... 9 more
然后您可以看到JAR文件已被更改:

root@dbs01 ~
$ ls -l lifecycle-0.1-SNAPSHOT.jar
-rw-r--r--   1 root     root     24740243 Jun  4 20:56 lifecycle-0.1-SNAPSHOT.jar
我可以在我的Maven存储库中找到它抱怨的JmsUtils类和ActiveMQ TransportConnection类,我还可以尝试什么

root@dbs01 ~
$ jar tf lifecycle-0.1-SNAPSHOT.jar | grep JmsUtils
org/springframework/jms/support/JmsUtils.class
root@dbs01 ~
$ jar tf lifecycle-0.1-SNAPSHOT.jar | grep TransportConnection                                               
org/apache/activemq/broker/MapTransportConnectionStateRegister.class
org/apache/activemq/broker/SingleTransportConnectionStateRegister.class
org/apache/activemq/broker/TransportConnection$1.class
org/apache/activemq/broker/TransportConnection$2.class
org/apache/activemq/broker/TransportConnection$3.class
org/apache/activemq/broker/TransportConnection.class
org/apache/activemq/broker/TransportConnectionState.class
org/apache/activemq/broker/TransportConnectionStateRegister.class
org/apache/activemq/broker/jmx/ManagedTransportConnection.class
在执行过程中,什么可以修改JAR文件的状态?如果我从远程机器附加一个调试器会怎么样?这会有任何影响吗(我假设没有)

提前谢谢


--James

首先要尝试的是将jar文件的模式更改为
444
甚至
400
,然后看看发生了什么

Java,即JRE本身,根本不应该修改jar文件;它只需要对其进行读访问。最有可能的情况是,在某个地方,错误地获取了数据文件路径的jar文件路径,只有上帝知道如何获取


将文件设为只读,您应该会在访问(或至少打开)时出现异常。

将文件设为444或400权限时也会发生同样的情况。给出了什么--当文件为只读时,如何写入文件?不要以root用户身份运行应用程序。