标签: classpath

将相对目录添加到java类路径并使用ClassLoader().getResourceAsStream("")

是否可以将相对目录(即foo/bar/plugh)添加到java类路径并使用

InputStream in = getClassLoader().getResourceAsStream("xyzzy.properties");
Run Code Online (Sandbox Code Playgroud)

要获取foo/bar/plugh/xyzzy.properties?

我的classpath看起来像这样:

foo.jar;foo/bar/plugh;xyz.jar 
Run Code Online (Sandbox Code Playgroud)

我可以使用foo和xyz jar中的类和资源,但不能使用plugh目录.在这些情况下,in始终为null.

我不能让这个工作,我不确定这是否只是不支持,我错过了一些微妙或我做错了什么.我需要使用绝对路径吗?

java directory classpath classloader

5
推荐指数
1
解决办法
2万
查看次数

找不到Java类

我正在尝试从jar文件运行java程序.Java找不到支持marc4j的类.我究竟做错了什么.这是详细信息

在我当前的直接是MarcTry.jar我的主要课程.还有marc4j.jar,它有缺少的类:

org/marc4j/MarcReader
Run Code Online (Sandbox Code Playgroud)

例如:

java -jar MarcTry.jar线程"main"中的异常java.lang.NoClassDefFoundError:org/marc4j/MarcReader引起:java.lang.ClassNotFoundException:java.net.URLClassLoader $ 1.run(URLClassLoader.java)中的org.marc4j.MarcReader :202)在java.security.AccessController.doPrivileged(Native Method)java.net.URLClassLoader.findClass(URLClassLoader.java:190)at java.lang.ClassLoader.loadClass(ClassLoader.java:307)at sun.misc. java.lang.ClassLoader.loadClass(ClassLoader.java:248)中的Launcher $ AppClassLoader.loadClass(Launcher.java:301)找不到主类:marctry.Main.程序将会退出.

我试过了

java -jar MarcTry.jar -classpath marc4j.jar

有和没有marc4j.jar一个完全限定的路径.

欢迎任何想法.

java jar classpath

5
推荐指数
1
解决办法
8040
查看次数

编写Java库以有条件地处理输入类,而不会对该类造成无条件的运行时依赖性

我有一个看似棘手的Java库任务.

我需要编写一个适配器/辅助类来处理JTable具有一些附加功能的s,如果它JTable是a JXTable.但我不想在swingx-core-1.6.2.jar上添加运行时依赖,除非我的应用程序实际使用JXTable(在这种情况下它已经要求在类路径上有SwingX jar文件)

如何解耦我的代码来实现这一目标?我甚至不知道如何测试JXTable; 如果我尝试instanceof JXTable用作测试,这意味着我的代码已经对JXTable具有无条件的运行时依赖性.

我之前编写的Java库有"可选"的运行时链接依赖项:如果我在我的库中有这个:

package com.foobar.foolib;

// import from whizbang.jar
import com.whizbang.BloatwareThingy;

public class SuperObject
{
    /* ... uses a BloatwareThingy ... */
}
Run Code Online (Sandbox Code Playgroud)

并且SuperObject是唯一使用whizbang.jar的类,然后只要我的最终应用程序不使用SuperObject,那么就没有运行时依赖于whizbang.jar; 如果我的最终应用程序确实想要使用SuperObject,那么它需要在类路径中包含whizbang.jar.从应用的角度来看是可选的.效果很好.

如何编写一个方法来测试给定的JTable是否为JXTable的实例,如果应用程序仅使用JTable,则不需要依赖SwingX jar文件?

java dependencies jar instanceof classpath

5
推荐指数
2
解决办法
408
查看次数

将当前目录添加到JAR文件的类路径中

我的代码被部署为JAR文件.JAR包含一个目录lib,其中包含我的代码所需的许多第三方JAR.我已经classpath使用Ant,通过它添加了这些MANIFEST.MF.

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.0
Created-By: 20.5-b03 (Sun Microsystems Inc.)
Main-Class: com.package.Class
Class-Path: ../lib/c3p0-0.9.1.2.jar ../lib/dbunit-2.4.8.jar ../lib/gua
va-10.0.1.jar ../lib/hsqldb.jar ../lib/javax.jms.jar ../lib/log4j-1.2
 .16.jar ../lib/mockito-all-1.9.0.jar ../lib/ojdbc14.jar ../lib/slf4j-
 api-1.6.4.jar ../lib/slf4j-log4j12-1.6.4.jar ../lib/xmlunit-1.3.jar
Run Code Online (Sandbox Code Playgroud)

还有一个queries.properties文件位于JAR的根目录中.

还有两个属性文件是必需的.我希望这些驻留在与JAR文件相同的目录中,并使代码能够找到它们.我相信代码能够找到这些属性文件,它们需要在classpath.因此,我需要将JAR文件的目录添加到classpath.

首先,这是正确的方法,我应该使用另一种方法来定位属性文件?

如果这是正确的,我如何使用Ant将JAR的当前目录添加到类路径中MANIFEST.MF?我在lib目录中添加了classpath使用manifestclasspathAnt任务的JAR .

java ant deployment classpath

5
推荐指数
1
解决办法
9191
查看次数

如何引用批处理文件中目录中的所有jar文件

我创建了一个批处理文件"run.bat":

set CLASSPATH=%CLASSPATH%.;.\Jars\app.jar;.\Jars\a.jar;.\Jars\b.jar;.\Jars\c.jar;.\Jars\d.jar;
java mypackage.mysubpackage.Start
pause
Run Code Online (Sandbox Code Playgroud)

我已将所有与我的应用程序相关的类文件保存在"app.jar"中,并且 Start是应用程序开始执行的类.我有这个"run.bat"文件和我的"app.jar"想要在同一目录中引用的所有jar文件.
我将所有这些罐子保存在"Jars"文件夹中,并在我的"run.bat"文件中引用它,如上所示.但是,要通过我的"run.bat"引用每个jar文件,我需要将路径指定为".\ Jars\jarname.jar".当我使用".\ Jars\*.jar"时,"run.bat"不会引用罐子.任何人都可以提供替代品吗?

jar batch-file classpath

5
推荐指数
1
解决办法
1万
查看次数

在Eclipse中更改类路径

我最近卸载jre7并安装了jre6,因为我的项目需要它.但现在我的程序显示类路径错误.如何在Eclipse中更改类路径?

错误是:

归档:C:/ Program Files/Java/jdk1.7.0_05/lib/tools.jar由类路径引用,不存在.

java eclipse classpath

5
推荐指数
2
解决办法
6万
查看次数

如何在两个项目之间共享代码?

我有两个名为A和B的Java项目.它们都是作为war文件部署的Web应用程序.我分别在Eclipse工作区中创建它们.项目B使用项目A中的一个类命名MusicMapper.我加入了一个项目作为建议项目在Eclipse B的构建路径这篇文章.所以现在项目B可以编译而没有任何错误,MusicMapper通过在项目B中导入类,可以在项目B中看到类:

import com.projectA.MusicMapper;
Run Code Online (Sandbox Code Playgroud)

在我启动项目B的Web应用程序之前,一切似乎都没问题.但是,当我启动项目B并调用引用MusicMapper项目A中的类的代码时,我收到了以下运行时错误:

java.lang.ClassNotFoundException: com.projectA.MusicMapper
Run Code Online (Sandbox Code Playgroud)

所以这个错误似乎是由com.projectA.MusicMapper从项目A导入的未完成的类引起的.因为我已经将项目A添加到项目B构建路径并且项目B编译没有任何错误,为什么它在运行时报告此错误?

我采取的另一种方法是:我还尝试在项目B中使用以下Maven导入pom.xml:

    <dependency>
        <groupId>com.projectA</groupId>
        <artifactId>projectA</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <scope>system</scope>
        <systemPath>/path/to/projectA.jar</systemPath>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

projectA.jar我从项目A导出的jar文件在哪里.但它仍然给了我相同的东西ClassNotFoundException.如何让项目A中的类可以被项目B使用?似乎我尝试过的这两种方法都不起作用.

java eclipse classpath maven

5
推荐指数
1
解决办法
4411
查看次数

如何让sbt-native-packager避免将我的资源放入jar文件中?

我正在使用sbt-native-packager插件为我的应用程序生成一个启动脚本,这非常方便,因为这个插件生成了包含所有库依赖项的正确类路径规范.我没有分发这个应用程序,因此我没有把整个东西打包成一个tarball.我只使用libsbt-native-packager生成的目录,其中包含我的项目所依赖的所有jar文件,包括第三方库以及包含我自己的类和资源文件的jar文件.

在我的项目src/main/resources目录中,我有一些文件,我希望能够编辑,而不必使用sbt-native-packager重新生成整个安装,例如配置文件.这很困难,因为这些文件在我的所有类的jar文件中都被压缩了.

问题:如何告诉sbt-native-packager不要将我的资源文件放入jar文件中,同时仍然生成具有正确类路径的启动脚本,以便我的应用程序找到并读取这些资源文件,因为它们现在是从jar文件中?如果这意味着将所有类文件保留在一个好的jar文件中,只要文件src/main/resources保留为我可以更改的文件,而无需重新调用sbt stage,只要启动脚本有效.

scala classpath sbt-native-packager

5
推荐指数
1
解决办法
1183
查看次数

Android Studio 2.0:未找到Gradle DSL方法:'classpath()'错误(27,0)

首先,我已阅读所有其他解决方案帖子,到目前为止,没有一个有效.我正在使用Android Studio 2.0

错误:错误:(27,0)未找到Gradle DSL方法:'classpath()'可能的原因:

  • 项目'Sailu'sFood'可能正在使用不包含该方法的Gradle版本.打开Gradle包装文件
  • 构建文件可能缺少Gradle插件.应用Gradle插件
  • 这是build.gradle(app):

         apply plugin: 'com.android.application'
    
              android
              {
                compileSdkVersion 23
                buildToolsVersion "23.0.2"
    
            defaultConfig {
                applicationId "com.example.kandarp.food"
                minSdkVersion 21
                targetSdkVersion 23
                versionCode 1
                versionName "1.0"
              }
               buildTypes {
                release {
                    minifyEnabled false
                  proguardFiles getDefaultProguardFile('proguard-android.txt'),         'proguard-rules.pro'
                  }
                 }
             }
    
                      dependencies {
            compile fileTree(dir: 'libs', include: ['*.jar'])
            testCompile 'junit:junit:4.12'
            classpath 'com.google.gms:google-services:2.0.0-alpha6'
            compile 'com.android.support:appcompat-v7:23.1.1'
            compile 'com.android.support:design:23.1.1'
            compile 'com.google.android.gms:play-services-analytics:8.4.0'
            compile 'com.google.android.gms:play-services-ads:8.4.0'
                }
    
                 apply plugin: 'com.google.gms.google-services'
    
    Run Code Online (Sandbox Code Playgroud)

    这是build.gradle(顶级):

                 buildscript {
    
    
                repositories {
                    jcenter()
                }
    
                    dependencies {
    
                    classpath 'com.android.tools.build:gradle:2.0.0'
    
                }
    
    
    
            }
                  allprojects { …
    Run Code Online (Sandbox Code Playgroud)

    dsl plugins android classpath gradle

    5
    推荐指数
    1
    解决办法
    1130
    查看次数

    你如何编译Java 9中的jar文件?

    Java 9引入了模块的概念,它没有明确地替换jar文件,但是旧--classpath选项似乎已经消失了.

    该命令javac --help不再提及类路径.

    我正在尝试针对JUnit编译一些学生作品:

    > javac *.java --classpath junit.jar
    
    Run Code Online (Sandbox Code Playgroud)

    但是我会遇到各种错误,具体取决于我的尝试.对于上面的例子:

    javac: invalid flag: --classpath
    
    Run Code Online (Sandbox Code Playgroud)

    我的Java版本是:

    > java --version
    java 9
    Java(TM) SE Runtime Environment (build 9+181)
    Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
    
    Run Code Online (Sandbox Code Playgroud)

    我不是试图使用一个模块,只是一个.jar文件,我可以通过指定一个libs文件夹包含在IntelliJ中.

    编辑:我真正的问题是我没有包括正确的罐子.针对IntelliJ的默认JUnit5配置进行编译工作:

     javac -classpath "C:\Program Files\JetBrains\IntelliJ IDEA 2017.2.5\plugins\junit\lib\junit-jupiter-api-5.0.0.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2017.2.5\plugins\junit\lib\opentest4j-1.0.0.jar" *.java
    
    Run Code Online (Sandbox Code Playgroud)

    java classpath java-9 junit5

    5
    推荐指数
    1
    解决办法
    155
    查看次数