标签: classpath

CLASSPATH中的空格

我正在使用Windows PC,并在其上安装了cygwin!我已将所有罐子组织在几个目录中的目录下!我正在编写一个bash脚本来设置CLASSPATH迭代通过作为参数传递的目录,如下所示:

for JAR_FILE in `ls *.jar`
do
    CLASSPATH="$DIRECTORY_TO_LOOK_FOR_JARS"/$JAR_FILE:$CLASSPATH
done
Run Code Online (Sandbox Code Playgroud)

只要目录中有空格像/cygdrive/c/Documents and Settings/user/My Jars我一样运行java -cp $CLASSPATH somepackage.someclass,它就会抛出一个错误,指出and找不到类,因为CLASSPATH变量之后会被拆分/cygdrive/c/Documents.

有人可以帮我解决这个问题吗?

java cygwin classpath

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

如何在执行java.io.File或FileInputStream时引用OSGi包中的包含文件

我正在使用aQute Bnd工具集来创建一个OSGi包,并打包了一些相关的"资源"文件.这包括我创建的资源目录中的*.css文件和*.xsd文件.

我在bundle.bnd文件中包含以下内容:

Include-Resource: resources/=resources/ 
Run Code Online (Sandbox Code Playgroud)

当我进行构建时,生成的*.jar文件在jar包文件的顶级目录的resources目录中包含*.css和*.xsd文件.

但是,在实际代码中,我很难尝试将其作为类路径的一部分引用:

我尝试过以下方法:

new File("resources/example.css");
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

URL cssFile = this.getClass().getResource("resources/example.css");
try
{
   file = new File(cssFile.toURI()));
}
catch(Exception e)
{
   e.printStackTrace();  
}
Run Code Online (Sandbox Code Playgroud)

我得到一个NullPointException错误或无法找到文件IOException错误(取决于我使用哪一个).我在调试配置模式下运行Eclipse Equinox以及Apache Felix(我们用于部署)时遇到此错误.注意我试图在BundleActivator之外的Java类中执行此操作.

我是否需要始终参考BundleActivator的上下文,例如?

 /*
 * (non-Javadoc)
 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
 */
 @Override
 public void start(BundleContext context) throws Exception 
 {   
     /* Service to host the Bundle interface. */
     ServletContainerService service = new ServletContainerService();
     service.addServlet(new ServletContainer(new AxisServlet(), true));
     this.serverReg = context.registerService(ServletContainerService.class.getName(), service, null);

     cssFile = new File(context.getClass.getResource("resource/example.css")); 
 }
Run Code Online (Sandbox Code Playgroud)

我认为上面的内容会起作用,但意味着我将不得不传递cssFile参考,而这个参考似乎并不优雅.

有没有办法在bundle/.jar文件的任何给定Java类中引用bundle jar文件中包含的'resources'目录的路径?如果它涉及BundleContext,有没有办法在任何Java类中引用它?

任何帮助都感激不尽.


我已经看过并 …

java osgi bundle classpath

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

taskdef的类路径?

我在Ant中定义了一个新任务.我将其导出为jar并添加到我的构建文件中:

<taskdef classname="X" classpath="Y.jar"/>
Run Code Online (Sandbox Code Playgroud)

问题是这在运行时失败了.它告诉我它没有找到班级.通过将jar添加到类路径,它已得到纠正.

我的问题是:有没有办法可以从Ant构建文件中引用我的jar,而不更改类路径?

ant classpath taskdef

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

如何在Eclipse .classpath文件中使用环境变量?

在Windows中,我有一个环境变量EXTERNAL_LIB_ROOT,指向C:\ Program Files\MyExternalLibRoot.在另一台机器上,它可能指向C:\ ExternalLibs.

在ant build.xml文件中,我将使用:

<pathelement location="${env.EXTERNAL_LIB_ROOT}/path/to/jar.jar"/>
Run Code Online (Sandbox Code Playgroud)

如何设置Eclipse项目.classpath文件以使用EXTERNAL_LIB_ROOT环境变量?是否可以让Eclipse使用上面的环境变量自动生成build.xml文件?

eclipse ant classpath environment-variables

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

如何检查jar文件是否有效?

我的webapp允许用户上传jar文件.但是,上传jar文件后,它已损坏.我通过比较md5校验和(winmd5free)来验证这一点.

上传的jar文件看起来"正常"和"正确"

  • 与原始文件相比较的文件大小(在KB级别)
  • 我可以使用7z打开上传的jar文件并查看其内容(资源和类文件),与原始文件相比,一切都是相同的

当我打开上传的jar文件(使用Notepad ++)时,我注意到二进制内容与原始内容不同.另外,当我使用JarInputStream读取jar条目时,没有条目.

JarInputStream is = new JarInputStream(new FileInputStream(new File("uploaded.jar")));
JarEntry entry = null;
while(null != (entry = is.getNextJarEntry())) {
 System.out.println(entry.getName());
}
Run Code Online (Sandbox Code Playgroud)

此外,当我双击jar(Windows)时,我收到以下消息.

错误:jarfile无效或损坏

我的问题是

  • 有没有办法以编程方式检查jar文件是否有效?我本来希望JarInputStream立即检测到它,但它根本没有显示任何问题
  • 当我双击jar文件,在Windows中,它是java.exe给我无效或损坏的jarfile消息?
  • 如何在类路径中传入无效的jar文件时,不会抛出错误/异常?例如java -cp uploaded.jar; libs*com.some.class.Test?

请注意,这与jar签名和/或检查jar的签名无关.它只是检查一个文件(上传与否)是否是一个有效的jar文件(不一定是jar的类文件是有效的,因为已经有关于这个问题的另一个SO帖子).

跑步的结果

jar -tvf uploaded.jar

java.util.zip.ZipException: error in opening zip file
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.<init>(ZipFile.java:127)
        at java.util.zip.ZipFile.<init>(ZipFile.java:88)
        at sun.tools.jar.Main.list(Main.java:977)
        at sun.tools.jar.Main.run(Main.java:222)
        at sun.tools.jar.Main.main(Main.java:1147)
Run Code Online (Sandbox Code Playgroud)

java jar classpath java-ee

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

java.library.path和classpath之间有什么关系

我正在寻找java.library.path和类路径之间关系的简单解释.虽然我不是新手,但我从来没有弄乱jlp但是我遇到了我参与的WebSphere MQ应用程序的问题,我们希望将其跟踪转向.不幸的是,一旦我告诉IBM我们已经重新打包MQ jar以便我们可以通过Maven进行部署,除非我们使用java.library.path加载WebSphere MQ jar,否则他们甚至不会和我讨论这个问题.

太棒了,让我们重做我们的整个部署策略.我可以咬那颗子弹,但这是我的问题:

java.library.path和类路径之间有什么关系?在jlp上找到的类是否对编译器可见?你必须在编译器的命令行上指定jlp吗?你能在jlp和classpath上指定这些类吗?哪个优先.

请不要因为研究不充分而喋喋不休地说这个问题.我当然用谷歌搜索"java.library.path".当然还有很多热门歌曲.我尝试进行高级谷歌搜索,将表达式限制在oracle.com网站上.还有很多点击率.我试过谷歌搜索这两个词.获得许多可疑质量的新手解释.我试过搜索java语言规范.没有命中.

我想要一个简洁而权威的解释.有人能指出我吗?

更新 - IBM坚持认为他们的MQ跟踪工具不会工作,除非我用-Djava.library.path = {MQ jars的路径}加载我的应用程序,除非我这样做,否则他们甚至不会支持我这条路.然而,当然,我有代码引用这些类并且必须编译.这是这个问题背后的动机.

java classpath java.library.path

11
推荐指数
1
解决办法
5944
查看次数

Gradle - 将目录添加到classpath

我的应用程序要求\config在类路径中查找目录下的配置文件时可以使用目录.我目前有依赖配置,但这可能不是使我的应用程序可用的目录的正确方法:

dependencies {
    ... //runtime, compile dependencies pulled from repositories
    runtime files('config')
}
Run Code Online (Sandbox Code Playgroud)

我正在使用该application插件为我的项目创建一个独立的zip.如果我的\config目录中有\config\subdir,file1,file2,则该插件产生build\install结构如下目录:

| build
| --|install
| ----|bin
| ------ projectName
| ------ projectName.bat
| ----|lib
| ------ dependency1.jar
| ------ dependency2.jar
| ------|subdir
| ------ file1
| ------ file2
Run Code Online (Sandbox Code Playgroud)

这对我的应用程序不起作用,因为它显式地需要一个\config目录

但是,这是我需要的目录结构:

| build
| --|install
| ----|bin
| ------ projectName
| ------ projectName.bat
| ----|lib
| ------ dependency1.jar
| ------ dependency2.jar …
Run Code Online (Sandbox Code Playgroud)

java classpath gradle build.gradle

11
推荐指数
2
解决办法
3万
查看次数

Scala REPL in Gradle

目前,Gradle的scala集成不提供REPL功能.如何使用适当的类路径从Gradle以符合人体工程学的方式运行Scala REPL?

scala classpath gradle read-eval-print-loop

11
推荐指数
1
解决办法
1827
查看次数

从PHP调用.jar文件 - Stanford NLP - 无法找到或加载主java类

我有一个项目正在使用这个包agentile/PHP-Stanford-NLP(PHP接口到斯坦福NLP工具(POS Tagger,NER,Parser)调用几个.jar文件.一切都在localhost(MAMP)上工作正常但是当我将它部署到laravel forge时它不再工作了.我在服务器中安装了JRE/JDK,Oracle JDK,Oracle JDK 8.

这是我用来调用java文件的代码段:

$parser = new \StanfordNLP\Parser(
        public_path().'/stanford-parser.jar',
        public_path().'/stanford-parser-3.4.1-models.jar'
);
$parser = $parser->parseSentence($text);
Run Code Online (Sandbox Code Playgroud)

这是错误来自的代码段:

$parser = $this->lexicalized_parser ? 'edu/stanford/nlp/models/lexparser/englishFactored.ser.gz' : 'edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz';
$osSeparator = $this->php_os == 'windows' ? ';' : ':';
$cmd = $this->getJavaPath()
     . " $options -cp \""
     . $this->getJar()
     . $osSeparator
     . $this->getModelsJar()
     . '" edu.stanford.nlp.parser.lexparser.LexicalizedParser -encoding UTF-8 -outputFormat "'
     . $this->getOutputFormat()
     . "\" "
     . $parser
     . " "
     . $tmpfname;
$process = proc_open($cmd, $descriptorspec, $pipes, dirname($this->getJar()));
Run Code Online (Sandbox Code Playgroud)

https://github.com/agentile/PHP-Stanford-NLP/blob/51f99f1aaa1c3d5822fe634346b2b4b33a7a6223/src/StanfordNLP/Parser.php#L90

这是错误:

Error: Could not …
Run Code Online (Sandbox Code Playgroud)

php java classpath stanford-nlp laravel

11
推荐指数
1
解决办法
618
查看次数

缩短命令行的类路径(-cp)

我的Maven未能在jdeps插件上构建(我们需要将其升级到jdk11)。

对于Windows,命令行太长。这是我得到的错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-jdeps-plugin:3.1.1:jdkinternals (default) on project myproject:
[ERROR] Exit code: 1 - La ligne de commande est trop longue.
[ERROR]
[ERROR] Command line was: cmd.exe /X /C 
"
    "C:\Program Files\Java\jdk-11.0.2\bin\jdeps.exe"
    -cp "
        C:\Users\Me\.m2\repository\com\something\firstJar.jar;
        C:\Users\Me\.m2\repository\com\somethingElse\secondJar.jar;
        C:\Users\Me\.m2\repository\com\somethingDifferent\someOtherJar.jar;
        ... and one more
        ... and another one
        ... I think you get the idea......."
    --multi-release 9 D:\git\myworkspace\myproject\target\classes
"
Run Code Online (Sandbox Code Playgroud)

对于这个例子,我只放了3个jar,但是我有很多依赖项...

如何缩短此命令行?(并确保它不依赖用户)

限制:这是一个共享项目,仅在我的计算机上进行任何更改都不是解决方案。

java command-line manifest.mf classpath maven

11
推荐指数
1
解决办法
583
查看次数