标签: classpath

如何检查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万
查看次数

将a属性设置为maven.compile.classpath包含WITHOUT Ant

我想在我的pom中将属性设置为包含所有项目依赖项的类路径.蚂蚁插件做了这样的事情,所以我知道这绝对是可能的.

我基本上想在我的pom中使用$ {maven.compile.classpath},并让它"正常工作".我不介意使用插件或其他任何东西来实现这一点.

非常感谢,

缺口

java maven-2 properties classpath

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

如何在Eclipse启动配置中使用变量进行类路径定义?

在我们的项目中,我们使用受版本控制的Eclipse启动配置与所有开发人员共享.现在有必要将外部存档包含到启动配置文件的类路径中.幸运的是,所需的存档位于每个开发人员的本地Maven存储库中.

我已经发现有一个名为M2_REPO的类路径变量引用了本地Maven存储库(对任何开发人员都有效).

但是如何在以下类路径定义中使用此变量来替换绝对路径?

<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
    ...
    <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;runtimeClasspathEntry externalArchive=&quot;C:/Dokumente und Einstellungen/050967/.m2/repository/com/google/gwt/gwt-dev/2.0.3/gwt-dev-2.0.3.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;"/>
    ...
</listAttribute>
Run Code Online (Sandbox Code Playgroud)

或者有没有办法包含环境变量(例如Windows' %USERPROFILE%可以帮助)?

eclipse classpath maven

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

Java:以编程方式确定类路径上加载的所有包名称

关于如何找到当前类路径中存在的包名列表的任何建议?

这需要在运行时通过类路径上加载(和执行)的一个类(即从里到外,而不是在外面)以编程方式完成.


更多细节:

我考虑的一种方法是对类加载器到目前为止加载的每个类使用反射,并从中提取包名.但是,我的应用程序已经遇到了数千个类,所以我需要一个更有效的方法.

我考虑的另一件事是类似于找出类路径中的JAR文件,然后为每个JAR并行执行目录列表.但是,我不知道这是否可以从应用程序/如何做到这一点.

奖励积分

任何建议可以按顶级包过滤的方式的人都可以获得奖励积分.例如,显示所有包含在com.xyz==> 下的包com.xyz.*,com.xyz.*.*

谢谢!

java reflection jar classpath package

10
推荐指数
1
解决办法
5588
查看次数

gwt test:无法在类路径中找到sample.gwt.xml

我正在为我的应用程序运行gwt测试,这就像一场噩梦,一个接一个地遇到问题,不知道出了什么问题.

首先,我创建了一个虚拟测试用例:

public class ListItemTest extends GWTTestCase {

  /**
   * Specifies a module to use when running this test case. The returned
   * module must include the source for this class.
   * 
   * @see com.google.gwt.junit.client.GWTTestCase#getModuleName()
   */
    @Override
    public String getModuleName() {
        return "com.dyihi.services.sample.Sample";
    }

    /**
     * Add as many tests as you like
     */
    public void testSimple() {
        assertTrue(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行'mvn test'时,这个简单的测试失败了.错误消息是:

initializationError0
java.lang.NoClassDefFoundError: com/google/gwt/dev/cfg/Condition
Run Code Online (Sandbox Code Playgroud)

我搜索了一下,发现我需要在我的pom中包含gwt-dev,然后我就这样做了,再次运行测试,现在它抛出了错误:

[ERROR] Unable to find 'Sample.gwt.xml' on your classpath; could be a typo, or …

java gwt classpath

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

了解Eclipse类路径声明

我正在尝试理解Eclipse类路径文件,特别是,我想知道这个:

  1. JRE如何使用它(即JVM是直接读取这个xml文件,还是eclipse以某种方式将其提供给它的内部编译器)?

  2. 当我从IDE运行我的类时,如何解析复杂条目(如下面的常春藤路径)并将其合并到JVM ClassLoader中?

上下文:我有一个奇怪的错误,就是eclipse正在使用类的"错误"版本,而我的ivy/ant版本正在使用正确的版本,因此我希望使用Eclipse工具来更好地模仿我纯粹使用的类加载器建立.为了做到这一点,我想我将不得不看看Eclipse项目/类路径文件.

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="src" path="test"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    <classpathentry kind="lib" path="conf"/>
    <classpathentry kind="con" path="org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/?ivyXmlPath=ivy.xml&amp;confs=*"/>
    <classpathentry kind="output" path="build"/>
</classpath>
Run Code Online (Sandbox Code Playgroud)

java eclipse ant classpath ivy

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

无法加载新的clojure库

我正在尝试第二天的clojure,我几乎什么都不懂.我正在使用Programming Clojure 2nd ed.我被困在图书馆里.

我有Leiningen并且正在运行REPL.这本书首先告诉读者运行简单

(require 'clojure.java.io)
Run Code Online (Sandbox Code Playgroud)

哪个工作得很好(我得到一个零).然后它想通过运行另一个简单来加载一个名为introduction.clj的文件

(require 'examples.introduction)
Run Code Online (Sandbox Code Playgroud)

我收到错误消息的地方

FileNotFoundException Could not locate clojure/java/introduction__init.class
or clojure/java/introduction.clj on classpath:   clojure.lang.RT.load (RT.java:432)
Run Code Online (Sandbox Code Playgroud)

我下载了introduction.clj文件,看看我应该放在哪里.错误和书说该命令将在我的类路径中搜索,但我不知道在哪里或那是什么(在搜索和阅读1小时后我仍然没有得到它,对不起).我运行了一些命令,并列出了许多类路径(其中没有包含clojure/java/io.clj).

所以我尝试了另一种方法 - 在我的磁盘上找到io.clj文件,只需将文件复制到那里并使用命令运行它

(require 'clojure.java.introduction)
Run Code Online (Sandbox Code Playgroud)

这似乎也不起作用.顺便说一句,我找到的io.clj文件位于"C:\ Program Files\clojure\src\clj\clojure\java"中.我尝试从java文件夹中运行其他几个.clj文件以及clojure文件夹,比如javadoc.clj或inspector.clj,所有这些文件似乎都可以正常使用上面提到的命令.只有新文件似乎不会以这种方式加载.

任何帮助赞赏:)

clojure classpath require leiningen

10
推荐指数
1
解决办法
2189
查看次数

Spring内部的war无法在内部jar文件中找到classpath资源

我有一个像这样组织的项目:

core
  -- /src/main/resources/company/config/spring-config.xml
webapp
  -- /WEB-INF/applicationContext.xml
Run Code Online (Sandbox Code Playgroud)

webapp取决于我在部署时core.jar正确包含的内容WEB-INF/lib.

在web.xml我有:

<param-value>
    /WEB-INF/applicationContext.xml
</param-value>
Run Code Online (Sandbox Code Playgroud)

在applicationContext.xml我有:

<import resource="classpath:/company/config/spring-config.xml" />
Run Code Online (Sandbox Code Playgroud)

但是当我跑步时,我收到了这个错误:

2012-10-04 20:03:39,156 [localhost-startStop-1] springframework.web.context.ContextLoader ERROR: Context initialization failed
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from URL location [classpath:/company/config/spring-config.xml]
Offending resource: ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [company/config/spring-config.xml]; nested exception is java.io.FileNotFoundException: class path resource [company/config/spring-config.xml] cannot be opened because it does not exist
    at …
Run Code Online (Sandbox Code Playgroud)

spring tomcat war classpath

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

SBT Scaladoc配置

我正在尝试在SBT中配置Scaladoc,特别是标题,输出目录和类路径.

我设法通过在build.sbt中添加以下内容来定义标题:

scalacOptions in (Compile, doc) ++= Opts.doc.title("Scala-Tools")
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何更改doc输出目录.

我也无法弄清楚如何将jar添加到classpath.我想编辑类路径的原因是因为当我引用它的类时,scaladoc似乎没有得到标准的Scala库,即[[scala.Option]]导致警告"找不到任何链接的成员为"scala.Option"."

任何帮助,即使是一个示例SBT配置的形式将不胜感激!

我正在使用Scala 2.10-RC3和SBT 0.12.1.

scala classpath sbt output-directory scaladoc

10
推荐指数
1
解决办法
2356
查看次数

IntelliJ IDEA:String、System 和其他 Java 类的“无法解析符号”

我最近将 IntelliJ IDEA 下载到了另一台计算机上。在一台计算机上它在另一台计算机上工作正常,它给了我这个当前问题。

当我用模板打开一个新项目时,它会自动在任何地方显示错误,即使它允许代码运行并正确显示输出:标准 Java 库类如String和System以红色突出显示,错误工具提示说:“无法解析符号”。

我尝试过“使缓存无效/重新启动”,但没有帮助。

显示 JDK 类中错误的基本代码

java sdk classpath intellij-idea

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