我在JBoss 4.3-eap上使用捆绑的战争,jar和配置文件(.properties文件)部署耳朵时遇到问题.这是我的耳结构:
+app.ear
+lib
*.jar libraries that the war's use
+classes
*.properties and other configuration files
+META-INF
application.xml
jbos-app.xml
app.war
app2.war
appn.war
Run Code Online (Sandbox Code Playgroud)
我在jboss-app.xml中有以下内容:
<jboss-app>
<jmx-name>app.startup.JbossStartUpServer:service=JbossStartUpService</jmx-name>
</jboss-app>
Run Code Online (Sandbox Code Playgroud)
我的application.xml看起来像这样:
<application id="app_id">
<display-name>App>/display-name>
<description>TheApp>/description>
<!--
<module id="core">
<java>lib/core.jar</java>
</module>
<module id="tag">
<java>lib/tag.jar</java>
</module>
-->
<module id="app">
<web>
<web-uri>app.war</web-uri>
<context-root>/</context-root>
</web>
</module>
<module id="app2">
<web>
<web-uri>app2.war</web-uri>
<context-root>/app2</context-root>
</web>
</module>
<module id="appn">
<web>
<web-uri>appn.war</web-uri>
<context-root>/appn</context-root>
</web>
</module>
<security-role id="secRole">
<description>users</description>
<role-name id="appRoleName">users</role-name>
</security-role>
<library-directory>lib</library-directory>
</application>
Run Code Online (Sandbox Code Playgroud)
基本上,在部署耳朵时,我遇到了一个问题,其中我的一场战争无法在core.jar文件中找到一个类(java.lang.NoClassDefFoundError).我认为这是因为战争没有找到这个库,即使它在lib文件夹/类路径中.如果我试图取消对前两个模块添加第一方库(core.jar和tag.jar …
我有一个使用Maven设置的多模块Spring项目:
my-root (pom)
- my-logic
- my-webapp (depending on my-logic)
- my-consoleapp (depending on my-logic)
Run Code Online (Sandbox Code Playgroud)
我的测试类继承AbstractTransactionalJUnit4SpringContextTests并@ContextCofiguration用于设置ApplicationContext.
例如Spring Controller的测试类:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"classpath:applicationContext-logic-test.xml",
"classpath:applicationContext-web-test.xml"})
public class ControllerTest extends AbstractTransactionalJUnit4SpringContextTests {
@Autowired
private ApplicationContext applicationContext;
...
}
Run Code Online (Sandbox Code Playgroud)
如您所见,每个模块都有一个配置XML.我有单独的配置用于测试,驻留在每个模块的测试/资源中(另外还有后缀"-test").如果我在Eclipse中运行JUnit测试,这一切都有效(类编译,运行并且JUnit测试成功).
现在我的问题:使用Maven运行测试将无法正常工作!(例如,使用"Run As">"Maven install" my-root(我使用m2eclipse)).具体来说,它将抛出以下异常:
java.io.FileNotFoundException:类路径资源[applicationContext-logic-test.xml]无法打开,因为它不存在
似乎Maven没有将文件添加my-logic/src/test/resources到运行单元测试时设置的类路径中my-webapp.
我该如何解决这个问题?
编译我的java程序时出现此错误
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
Run Code Online (Sandbox Code Playgroud)
然后我知道我应该添加mysql-connector-java-3.1.14-bin.jarjava类路径的路径.我使用的是Windows XP,我在controlpanel/system/enviromental变量中编辑了类路径
类路径是: .;C:\j2sdk1.4.2_16\jre\lib;
所以它现在成了: .;C:\j2sdk1.4.2_16\jre\lib;C:\Program Files\mysql-connector-java-3.1.144
但是,我仍然得到相同的错误,而且,当我在cmd中键入set classpath(只是为了检查当前的类路径)时,我得到:
CLASSPATH= .;C:\j2sdk1.4.2_16\jre\lib;
Run Code Online (Sandbox Code Playgroud)
谁能帮我解决这个问题?
我正在尝试将*.ico文件中的外部图标添加到我正在使用WindowBuilder设计窗口创建的窗口中.我可以选择shell,它会显示一个"图像"属性字段.
这会打开图像选择器对话框:

如何使我的图标在此菜单中显示为类路径资源?如果给出了绝对路径,则图像有效,但我不想在我的应用程序中使用该选项.
谢谢!
如何保存/加载位于我的课程所在的文件?我之前没有到该位置的物理路径,我想动态地找到该文件.
谢谢
编辑:
我想加载一个XML文件并写入和读取它,我不知道如何解决它.
我尝试了很多组合,每次尝试从lib目录添加jar时,intelliJ都会将路径作为src目录.我不知道为什么.当我将jar移动到src /目录时,intelliJ然后将路径切换到lib /目录.我不知道如何让它正常工作.
当我处理小型桌面项目时,我曾经lib在项目的根目录中创建文件夹,在那里我保留了所有项目的jar依赖项.然后我使用配置构建路径 - > 库 - > 添加JAR ...来手动将此文件夹中的所有jar添加到buildpath/classpath.而且因为添加JAR ...(与添加外部JAR不同)使用相对路径,项目是可移植的,这对我来说很重要.
问题是每次我从我的lib文件夹中添加或删除一个jar时,我需要在项目构建路径设置中手动添加/删除这个jar(当然我经常忘记这样做).
有没有办法告诉Eclipse"这是我保存所有罐子的文件夹.请将所有罐子自动添加到buildpath/classpath"?我试图将此文件夹视为类文件夹(Add class folder...),但它不起作用:(.
PS我知道Maven和Eclipse-Maven集成,但我想保持我的小项目很简单(Maven集成有时令人沮丧,所以我宁愿在这些项目中避免它),所以请不要在回答中提出这个建议.另外正如我所提到的,这些是桌面项目,因此WEB-INF/lib我的项目中没有通常由Java EE插件自动处理的文件夹.
我在Java 6上,我有一个方法可以扫描运行时类路径中的文件config.xml.如果找到,我想将文件的内容读成字符串:
InputStream istream = this.getClass().getClassLoader().getResourceAsStream("config.xml");
if(istream != null) {
System.out.println("Found config.xml!");
StringBuffer fileData = new StringBuffer(1000);
BufferedReader reader;
try {
reader = new BufferedReader(new FileReader(fileName));
char[] buf = new char[1024];
int numRead = 0;
while((numRead=reader.read(buf)) != -1) {
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
buf = new char[1024];
reader.close();
}
} catch (FileNotFoundException fnfExc) {
throw new RuntimeException("FileNotFoundException: " + fnfExc.getMessage());
} catch (IOException ioExc) {
throw new RuntimeException("IOException: " + ioExc.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,我得到以下控制台输出:
Found …Run Code Online (Sandbox Code Playgroud) 我在用:
我使用emacs创建了一个Java项目,并具有以下项目和类路径文件:
.项目
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>snaprequest</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
Run Code Online (Sandbox Code Playgroud)
的.classpath
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="bin"/>
</classpath>
Run Code Online (Sandbox Code Playgroud)
我有这个版本
在我的Java程序中,我想使用JSONObject,所以我尝试导入以下内容:
import org.json.JSONObject;
Run Code Online (Sandbox Code Playgroud)
当我尝试在命令行上编译时,我收到此错误:
error: package org.json does not exist
import org.json.JSONObject;
Run Code Online (Sandbox Code Playgroud)
我知道我需要在我的类路径上添加一些内容,以便它可以找到jar文件,但我不确定如何?
在应用程序类路径上(例如在jar中),您可以拥有一个application.properties,它为name提供合理的默认属性值.在新环境中运行时,可以在jar外部提供覆盖名称的application.properties
我将重复的application.properties与覆盖的名称放在与jar文件相同的路径上,但是在运行应用程序时:
java -jar target/myproject-0.0.1-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)
名称值没有被覆盖,它仍然指的是jar文件中的application.properties里面的一个.我也尝试过:
java -Dspring.config.location=/target/application.properties -jar target/myproject-0.0.1-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)
但它不起作用,请帮忙.
编辑
当我将当前目录更改为target并运行它时,它可以工作.
java -jar myproject-0.0.1-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)
为什么?为什么不能在路径之外运行呢?
classpath ×10
java ×8
eclipse ×2
file-io ×2
buildpath ×1
classloader ×1
deployment ×1
jboss-4.2.x ×1
jdbc ×1
json ×1
junit ×1
maven-2 ×1
spring ×1
spring-boot ×1
swt ×1