我一直在尝试运行一个jar文件 - 让我们称之为test.jar - 它在Unix系统上使用Sybase jconn3.jar.
我创建了一个MANIFEST.MF文件,其中包含以下内容:
Class-Path: $SYBASE/jConnect-6_0/classes/jconn3.jar commons-net-1.3.0.jar
Run Code Online (Sandbox Code Playgroud)
这给出了一个ClassNotFoundError.$ SYBASE是指向/ opt/sybase13的系统变量; 我也尝试过以下方法:
Class-Path: /opt/sybase13/jConnect-6_0/classes/jconn3.jar commons-net-1.3.0.jar
Run Code Online (Sandbox Code Playgroud)
和
Class-Path: opt/sybase13/jConnect-6_0/classes/jconn3.jar commons-net-1.3.0.jar
Run Code Online (Sandbox Code Playgroud)
但是,如果我将jconn3.jar文件从$ SYBASE/jConnect-6_0/classes复制到test.jar所在的目录,并将我的MANIFEST.MF更新为如下所示:
Class-Path: jconn3.jar commons-net-1.3.0.jar
Run Code Online (Sandbox Code Playgroud)
应用程序按预期运行.
现在,我已经能够通过在本地复制它来验证jconn3.jar文件的工作原理; 我的MANIFEST.MF文件包含我的Main-Class的路径,所以这里没有问题.
您认为这可能是什么问题?我一直在看这个东西太久了.谢谢!
我有以下代码:
// Test TODO remove
try {
System.out.println(System.getProperties().getProperty("java.class.path"));
this.getClass().getClassLoader().loadClass("mypackage.MyClass");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
现在输出显示出该类位于类路径上,即:
/...some/path.../workspace/project/target/test-classes:/rest/of/the/classpath
java.lang.ClassNotFoundException: mypackage.MyClass
...here be stacktrace...
Run Code Online (Sandbox Code Playgroud)
我还确保类文件确实位于给定位置,即该文件存在:
/...some/path.../workspace/project/target/test-classes/mypackage/MyClass.class
Run Code Online (Sandbox Code Playgroud)
也许以下几点很重要:所示代码是在附加到jUnit测试的javaagent中执行的,我通过编程方式启动了该代码(通过Runtime.execute(...))-因此,很明显,除了背景...但仍然:如果类路径包含带有类的文件夹,那么为什么它不能被加载?
admin@apollo:~/clojure$ clojure
Clojure 1.0.0-
user=> (require 'clojure.contrib.str-utils)
java.io.FileNotFoundException: Could not locate clojure/contrib/str_utils__init.class or clojure/contrib/str_utils.clj on classpath: (NO_SOURCE_FILE:0)
user=>
Run Code Online (Sandbox Code Playgroud)
安装clojure时我做错了什么?为什么cant clojure找不到我的java类?我安装了java.
admin@apollo:~/clojure$ sudo apt-get install sun-java6-jre sun-java6-jdk
sudo: unable to resolve host apollo
Reading package lists... Done
Building dependency tree
Reading state information... Done
sun-java6-jre is already the newest version.
sun-java6-jdk is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 15 not upgraded.
admin@apollo:~/clojure$ java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java …Run Code Online (Sandbox Code Playgroud) 对于我的课程,我从教授给我们的在线资源中导入代码并尝试在Eclipse Juno中运行它(我不确定它是否会对哪个版本产生影响)并且我收到错误消息"Unbound classpath container:"项目'cs112'中的JRE系统库[OSGi/Minimum-1.2]'我研究了这个问题的几个答案并尝试了多种解决方案,包括构建路径和添加一个名为JRE的库,并设置正确的执行环境!我怎么可能做错了?请帮忙!!
我正在尝试将一个简单的Groovy项目移动到Gradle.我几乎能够配置项目,但我不知道如何处理外部资源.
基本上,我的应用程序需要访问JSON中的配置文件.在转移到Gradle之前,我曾经在命令行上传递此JSON文件的位置.我创建了一个简单的bash脚本来调用具有正确资源路径的主类.
使用Gradle,如果我理解正确,我应该能够将这个文件移动到src/main/resources/Groovy类中以某种方式提供它.问题是:怎么样?
编辑
如果我理解正确,资源应该在构建的JAR中结束.我的目标结构就像
src
main
groovy
orgName
packageName
source.groovy
resources
orgName
packageName
config.json
Run Code Online (Sandbox Code Playgroud)
但是我没有看到在build目录中生成的packageName.jar中的资源
我今天决定试用Hibernate,看起来很有前途,虽然设置可能更容易.在找到第一百万左右配置错误的解决方案后,我现在坚持使用这个:
Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: manager1] Unable to build EntityManagerFactory
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:915)
(...)
Caused by: org.hibernate.HibernateException: Bean Validation not available in the class path but required in javax.persistence.validation.mode
at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.applyHibernateListeners(BeanValidationIntegrator.java:281)
at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.integrate(BeanValidationIntegrator.java:134)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:303)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1750)
at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:94)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905)
... 5 more
Run Code Online (Sandbox Code Playgroud)
Peristence.xml:
<?xml version='1.0' encoding='utf-8' ?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="manager1" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>net.zomis.hibernate.Game</class>
<class>net.zomis.hibernate.TestFields</class>
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
<validation-mode>CALLBACK</validation-mode>
<properties>
<property name="javax.persistence.validation.mode" value="NONE" />
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="validate"/>
</properties>
</persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)
(据我所知)相关部分 hibernate.cfg.xml …
我的jar文件的结构是:
com/my/Main.class
META-INF/MANIFEST.MF
RXTXcomm.jar
Run Code Online (Sandbox Code Playgroud)
Manifest.mf包括:
Manifest-Version: 1.0
Main-Class: com.my.Main
Class-Path: RXTXcomm.jar
Run Code Online (Sandbox Code Playgroud)
(空行)
当我运行我的jar时: java -jar my.jar
我明白了: Exception in thread "main" java.lang.NoClassDefFoundError: gnu/io/SerialPortEventListener
怎么了?
实际上我今天更新了我的jdk但是当我打开intelliJ时我无法编译任何类..它显示以下消息.."java:在类路径中找不到系统Java编译器"请帮帮我.
我对SLF4J很感兴趣,因为它似乎是唯一的Java库(至少我可以解释),它在运行时使用这种所谓的" 动态绑定 "类来定义行为.
通过这个,我的意思是,如果你slf4j-api在编译类路径中包含,你现在可以访问该JAR中包含的所有API类(Loggers和LoggerFactories等),但它们的实际运行时行为是no-op(什么都不做),除非你包含一个运行时类路径上的" SLF4J绑定 ",例如slf4j-simple(将日志语句发送到STDOUT和STDERR),或者slf4j-log4j,然后期望Log4J配置等.
就像我上面所说的,这种类型的动态绑定行为似乎是SLF4J项目所特有的.
我想知道为什么?一般来说,在日志记录之外,哪种场景可以保证这种动态绑定作为解决方案?对我来说,它似乎是经典依赖注入(Spring,Guice)的替代方案,几乎将注入推迟到运行时("JIT")确定运行时类路径上可用的匹配类.
所以我问:这个解决方案是否唯一有理由只解决日志记录问题?如果是这样,为什么?如果没有,那么还有哪些其他问题需要这种方法作为解决方案?
最近,我从eclipse切换到了Intellij。我正在对Tomcat进行战争,我需要向Tomcat启动配置添加一个外部类路径(带有属性文件)。在Eclipse中可用view servers - Tomcat (2click) -> open launch configuration -> classpath tab -> select user entries -> advanced -> Add Folder
在Intellij中,我尝试过,Menu Run -> edit configuration -> select tc instance -> Configure -> add (+) classes但是当我添加带有属性文件的目录时,在启动过程中,war仍然崩溃,并提示它找不到属性文件。
该文件存在,并且tomcat / eclipse成功启动。我相信在Tomcat中,可以使用修改路径setenv.bat。有什么事吗 我们的最终目标是Websphere,其中从特定目录加载这种与环境相关的属性。因此,maven配置文件是一个选择,但在最终交付时没有用。