我最近从.NET切换到J2EE,并且对于放置JAR文件的位置感到困惑.我知道CLASSPATH,WEB-INF和Eclipse的Java Web Path都是可以存储JAR的地方,但我对使用哪个文件夹,何时以及为什么感到困惑.
首先,我们有CLASSPATH.我通常通过进入"我的电脑"中的"环境变量"来设置它.我知道这是Java编译器查找JAR文件的默认位置.当我将文件夹或JAR添加到我的CLASSPATH环境变量时,为什么Eclipse,Java编译器和Web服务器会忽略它?
此外,我知道WEB-INF\LIB是一个可以放置Web应用程序将要使用的JAR文件的地方.但是,我将JAR放在WEB-INF\LIB中只是为了让它们被忽略.在什么情况下我应该将JAR放入WEB-INF\LIB文件夹?如何让Eclipse或Web服务器注意到它们?
到目前为止,唯一对我有用的是实际更改Eclipse项目的Java Build Path.我将选择我需要的JAR并点击"Add External JARs".大部分时间,当我这样做时,Eclipse将识别我的JAR并阅读其中的类.但是,我这样做时遇到了一堆奇怪的随机错误(我认为这主要与依赖关系有关).出于某种原因,我只是觉得这不是正确的做事方式,而是我错过了一些重要的信息.我什么时候应该在Eclipse中手动添加外部JAR,何时应该以不同的方式做事?为什么Eclipse的Java Build Path似乎不知道我的CLASSPATH环境变量中的文件夹?
真的,我想更好地理解CLASSPATH,Eclipse的Java构建路径和WEB-INF/LIB文件夹 - 它们服务的目的,它们之间的关系,以及我应该将JAR放在各种各样的地方的情况.我很感激你能给我的任何建议,或者你可以推荐的任何文章.
谢谢.
我正在尝试将Spring集成到一个包含数千个类的相当大的应用程序中,并且由于组件扫描,我在启动容器时遇到了巨大的延迟.
我已经收窄,以减少在扫描无关目录浪费的时间,在"基本包"规定,到最低目录的数量,但初始化的类路径扫描部分仍需要大约1-2分钟.
那么,有没有办法优化扫描过程?我曾想过将候选类路径存储在一个文件中,然后让容器从文件中获取它们,而不是每次启动都扫描类路径,但我真的不知道从哪里开始,或者甚至可能.
任何建议都非常感谢.提前致谢.
编辑:加载Bean定义形成自动生成XML文件,减少了弹簧引导时间9〜10秒这证实了各组分的类路径扫描使用由Spring反射API是启动延迟的主要来源.
至于生成xml文件,这里是代码,因为它可能对有相同问题的人有帮助.
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.ArrayList;
public class ConfigurationWriter {
public ArrayList<String> beanDefinitions = new ArrayList<String>();
public ConfigurationWriter() {
// the context loaded with old fashioned way (classpath scanning)
ApplicationContext context = SpringContainerServiceImpl.getInstance().getContext();
String[] tab = context.getBeanDefinitionNames();
for (int i = 0; i < tab.length - 6; i++) {
Class clazz = context.getType(tab[i]);
String scope = context.isPrototype(tab[i]) ? "prototype" : "singleton";
String s = "<bean id=\"" + tab[i] + "\" class=\"" …Run Code Online (Sandbox Code Playgroud) 我不清楚这一点.当我在applet查看器中运行java App或运行Applet时(在IDE环境中), System.getProperty("java.class.path")给我与System.getenv("CLASSPATH")我的env变量中定义的CLASSPATH 相同.
但是当我将我的applet部署到web服务器并从与客户端相同的计算机访问它时,我得到了两个不同的结果.(System.getProperty("java.class.path")仅指向JRE home并System.getenv("CLASSPATH")返回null).
还有一些令我惊讶的事情:
对于applet部分,env var JAVA_HOME,在浏览器和Applet Viewer中部署applet时得到的结果相同.
如果我在系统级别定义一个env变量,并使用getenv("envName")结果是null.无论如何我可以定义一个并在我的Java程序中获取它吗?
java system classpath environment-variables system-properties
我正在尝试运行一个火花程序,其中我有多个jar文件,如果我只有一个jar我无法运行.我想添加位于相同位置的jar文件.我已尝试过以下但它显示了依赖性错误
spark-submit \
--class "max" maxjar.jar Book1.csv test \
--driver-class-path /usr/lib/spark/assembly/lib/hive-common-0.13.1-cdh?5.3.0.jar
Run Code Online (Sandbox Code Playgroud)
如何添加另一个位于同一目录下的jar文件?
我想加/usr/lib/spark/assembly/lib/hive-serde.jar.
这已经困扰了我多年了,我想你们其中一个好人会知道 - 在Eclipse的.classpath文件中,classpattrytry元素的combineaccessrules属性实际上用于什么?
我可以在Java Build Path配置对话框中看到它可以被maniuplated,但我想不出一个很好的用例.如果我搞砸了设置,或手动修改.classpath文件,它似乎没有任何影响.
我希望其他人能够很好地利用它,我可以窃取他们的想法.基本上,这是一个我想要划伤的痒.
如果类路径中有两个JAR文件,则两个JAR文件的根目录中都包含名为"config.properties"的资源.有没有办法检索两个类似的文件getClass().getResourceAsStream()?订单无关紧要.
另一种方法是在类路径中加载匹配某些标准的每个属性文件,如果可能的话.
为了更好地理解Java中的工作原理,我想知道我是否可以在运行时动态地将目录添加到类路径中.
例如,如果我使用"java -jar mycp.jar"启动.jar并输出java.class.path属性,我可能会得到:
java.class.path: '.:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java'
Run Code Online (Sandbox Code Playgroud)
现在可以在运行时修改此类路径以添加另一个目录吗?(例如在使用位于我想添加的目录中的.jar对类进行第一次调用之前).
如何使用类路径指定Spring项目中文件的位置?
这就是我目前所拥有的:
FileReader fr = new FileReader("C:\\Users\\Corey\\Desktop\\storedProcedures.sql");
Run Code Online (Sandbox Code Playgroud)
这是我的桌面硬编码.我想要的是能够使用我的项目中的文件的路径.
FileReader fr = new FileReader("/src/main/resources/storedProcedures.sql");
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我正在运行一个简单的"HelloWorld"程序.我在命令提示符中收到此错误:
无法找到或加载主类
HelloWorld.
我已经设置了CLASSPATH和PATH可变系统.在cmd提示符中,我从我保存HelloWorld程序的目录运行.我可以看到类名和文件名相同,也可以.class在同一目录中创建文件.还有什么可能是问题?
我的示例程序如下所示:
package org.tij.exercises;
public class HelloWorld {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Hello World!!");
}
}
Run Code Online (Sandbox Code Playgroud) 我在扩展BottomSheetDialogFragment的整个类中出错
Cannot access 'androidx.lifecycle.HasDefaultViewModelProviderFactory' which is a supertype of 'FavoriteBottomDialogFragment'. Check your module classpath for missing or conflicting dependencies
Run Code Online (Sandbox Code Playgroud)
该类位于 app 模块中,该模块实现了另外两个模块:core 和presentation-core
构建.gradle
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation project (':core')
implementation project (':presentation-core')
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.41"
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.2.0'
testImplementation 'junit:junit:4.12'
implementation "com.google.android.material:material:1.1.0"
//Rx
implementation "io.reactivex.rxjava2:rxandroid:2.1.1"
implementation "io.reactivex.rxjava2:rxjava:2.2.9"
//Architecture component
implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
implementation 'androidx.room:room-runtime:2.0.0'
kapt 'androidx.room:room-compiler:2.0.0'
kapt 'androidx.lifecycle:lifecycle-common-java8:2.0.0'
implementation 'androidx.room:room-rxjava2:2.0.0'
implementation 'androidx.room:room-guava:2.0.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
}
Run Code Online (Sandbox Code Playgroud)
核心依赖
dependencies {
api fileTree(dir: 'libs', include: …Run Code Online (Sandbox Code Playgroud) classpath ×10
java ×8
eclipse ×2
spring ×2
android ×1
androidx ×1
apache-spark ×1
bottom-sheet ×1
cmd ×1
dependencies ×1
jar ×1
java-ee ×1
spring-mvc ×1
submit ×1
system ×1