我正在尝试以编程方式本地化一个属性文件,而不必将命令行上的完整路径名传递给我的程序.我想如果我能找到主类的路径,我可以将我的属性文件粘贴在同一目录或子目录中.
如果这不起作用,我可以通过其他方式找到属性文件的路径,而无需在命令行上传递它.
谢谢
我正在尝试让我的应用程序透明地加载资源(二进制文件):
如果该文件存在于当前目录下,请将其打开.
如果没有,请尝试查看当前的JAR文件(如果适用).
如果没有,请尝试查看其他JAR文件.(这是可选的,我不介意明确指定哪些JAR文件.)
到目前为止,我知道File哪个打开一个本地文件,ClassLoader哪个有getResource*JAR内容.
是否有一个结合了两者的课程?如果没有,我该如何自己写呢?我应该写一个ClassLoader也检查本地文件系统?用File?(我对Java非常熟悉,甚至不知道返回什么样的好类型.InputStream?)
谢谢
PS"文件"我的意思是"路径",例如"data/texture1.png".
我有一个简单的项目结构:
Base Dir
src ;; Pile of Clojure files
lib ;; Jar files
Run Code Online (Sandbox Code Playgroud)
要导出类路径:$ export CLASSPATH = $ CLASSPATH:src:lib/*
试图运行一个Clojure文件:java -cp $ CLASSPATH -jar lib/clojure.jar src/wizard-game.clj
但是我得到了:
线程"main"中的异常java.io.FileNotFoundException:找不到类路径上的
clojure/contrib/trace_init.class 或clojure/contrib/trace.clj: 引起:java.io.FileNotFoundException:找不到clojure/contrib / classpath上的trace _init.class或clojure/contrib/trace.clj:
好吧,这是一个类路径问题,但是我做错了什么/哪里?
有没有更好的方法来尝试运行它?
更新:
我试过这个命令:
java -classpath $ CLASSPATH clojure.main src/wizard-game.clj
现在运行正常.
我的网络应用似乎工作正常.我决定添加一些日志记录.当我部署war文件时,应用程序失败并出现异常,因为tomcat不知道log4j.jar.
我将jar添加到WEB-INF/lib文件夹并重新部署.例外消失了.这让我知道WEB-INF/lib在类路径上.
但是,现在logs/catalina.out有以下典型错误消息:
log4j:WARN No appenders could be found for logger (com.this.that.Validate).
log4j:WARN Please initialize the log4j system properly.
Run Code Online (Sandbox Code Playgroud)
因此,我将log4j.properties文件复制到WEB-INF/lib文件夹中.
log4j警告仍会显示,据我所知,没有任何记录.
我很欣赏有关解决这个问题的一些指导.我在追我的尾巴.
我相信我的第一个问题已经解决 - 我不再收到警告信息.我认为发生的事情是我在爆炸文件层次结构中有一个带有pwd的unix shell,这阻止了Tomcat成功删除旧项目.
我的log4j.properties文件是
log4j.rootLogger=DEBUG, FILE
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=prog1.log
log4j.appender.FILE.MaxFileSize=100KB
# Keep one backup file
log4j.appender.FILE.MaxBackupIndex=1
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%p %t %c - %m%n
Run Code Online (Sandbox Code Playgroud)
我将'log4j.appender.FILE.File = prog1.log'行更改为具有tomcat日志记录文件夹的显式路径.
谢谢大家,您的想法帮助我解决了这个问题,并且智能化了3.18%.
我正在创建一个基本的spring-maven项目,它应该作为java应用程序运行(在进程中,而不是在Web服务器上).
我的应用程序上下文位于我的类路径中的resources文件夹下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:ox="http://www.springframework.org/schema/oxm"
xsi:schemaLocation="
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.1xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<!-- Context -->
<context:component-scan base-package="me.co.nutrition" />
<!-- Properties -->
<context:property-placeholder
location="classpath:/nutrition.accumulation.properties" />
<!-- DB -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<bean id="persistenceUnitManager"
class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
<property name="defaultPersistenceUnitName" value="nutrition-pu"/>
<property name="persistenceXmlLocation" …Run Code Online (Sandbox Code Playgroud) 许多指南都引用了"JVM和Java设置"页面(在CF管理员中)来操作Adobe ColdFusion中的类路径.(我碰巧在ACF9上.)
我在Linux(Ubuntu)上运行多服务器ACF9,但我无法在任何地方找到该页面.
CF管理员http://i45.tinypic.com/1zfrm0z.png
它在哪里,和/或我如何操纵CF类路径?(特别是,我想为一个特定的实例修改它.)
我使用标准方式为我的系统设置了环境变量(即在〜/ .bashrc中设置它们).一切都编译并正常工作,但当我尝试查看$ CLASSPATH变量时,变量字符串末尾会显示"No such file or directory"消息,如下所示 -
user@user-pc:/media/Data$ $CLASSPATH [press enter]
bash: .:/opt/jdk1.7.0_03/lib/tools.jar:/opt/jdk1.7.0_03/lib/dt.jar:/usr/local/lib/JMF-2.1.1e/lib/jmf.jar:/usr/local/lib/jfreechart-1.0.13/lib/jfreechart-1.0.13.jar:/usr/local/lib/jfreechart-1.0.13/lib/jcommon-1.0.16.jar: No such file or directory
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?所有的jar位置都是正确的,没有遗漏/拼写错误,我做了双重检查.
编辑注意:我这样设置它们 -
JAVA_HOME=/opt/jdk1.7.0_03;export JAVA_HOME
JMFHOME=/usr/local/lib/JMF-2.1.1e;export JMFHOME
JFRC_HOME=/usr/local/lib/jfreechart-1.0.13;export JFRC_HOME
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
:$JMFHOME/lib/jmf.jar:$JFRC_HOME/lib/jfreechart-1.0.13.jar
:$JFRC_HOME/lib/jcommon- 1.0.16.jar;export CLASSPATH
Run Code Online (Sandbox Code Playgroud)
我正在使用Ubuntu 10.04,请忽略上面的所有"新行",它们归功于SO的降价编辑器.
缺少类"org.apache.xerces.impl.XMLDocumentFragmentScannerImpl"时出错.这是一个新的项目设置,whitout使用maven或其他工具来管理依赖项.我想忘了包含一些jar,如何找到自己的XMLDocumentFragmentScannerImpl?
尝试将我的同事的项目设置到我的工作空间时出现错误。
当我尝试编辑构建路径时,他几乎没有指向他本地的jar,它说.classpath是只读的。
有什么解决方案可以解决这个问题吗?
谢谢汤姆
Gradle如何在JavaExec类路径中包含runtimeOnly依赖项?例如,
子项目foo:
dependencies {
runtimeOnly files('libs/hello.jar')
}
Run Code Online (Sandbox Code Playgroud)
子项目栏:
dependencies {
compile project(':foo')
}
task execHello(type: JavaExec, dependsOn: 'compileJava') {
classpath = configurations.runtime
main 'myPackage.Hello'
}
Run Code Online (Sandbox Code Playgroud)
在libs / hello.jar中定义了主类myPackage.Hello,它是项目foo的runtimeOnly依赖项。
configuration.runtime不包含runtimeOnly依赖hello.jar。如果我在项目foo中将runtimeOnly依赖项更改为api依赖项,它将起作用。
classpath = configurations.runtime + configuration.runtimeOnly
Run Code Online (Sandbox Code Playgroud)
错误:runtimeOnly无法明确解决。如何在JavaExec类路径中添加hello.jar?