我的webapp允许用户上传jar文件.但是,上传jar文件后,它已损坏.我通过比较md5校验和(winmd5free)来验证这一点.
上传的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签名和/或检查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) 我想在我的pom中将属性设置为包含所有项目依赖项的类路径.蚂蚁插件做了这样的事情,所以我知道这绝对是可能的.
我基本上想在我的pom中使用$ {maven.compile.classpath},并让它"正常工作".我不介意使用插件或其他任何东西来实现这一点.
非常感谢,
缺口
在我们的项目中,我们使用受版本控制的Eclipse启动配置与所有开发人员共享.现在有必要将外部存档包含到启动配置文件的类路径中.幸运的是,所需的存档位于每个开发人员的本地Maven存储库中.
我已经发现有一个名为M2_REPO的类路径变量引用了本地Maven存储库(对任何开发人员都有效).
但是如何在以下类路径定义中使用此变量来替换绝对路径?
<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
...
<listEntry value="<?xml version="1.0" encoding="UTF-8"?><runtimeClasspathEntry externalArchive="C:/Dokumente und Einstellungen/050967/.m2/repository/com/google/gwt/gwt-dev/2.0.3/gwt-dev-2.0.3.jar" path="3" type="2"/>"/>
...
</listAttribute>
Run Code Online (Sandbox Code Playgroud)
或者有没有办法包含环境变量(例如Windows' %USERPROFILE%可以帮助)?
关于如何找到当前类路径中存在的包名列表的任何建议?
这需要在运行时通过类路径上加载(和执行)的一个类(即从里到外,而不是在外面)以编程方式完成.
更多细节:
我考虑的一种方法是对类加载器到目前为止加载的每个类使用反射,并从中提取包名.但是,我的应用程序已经遇到了数千个类,所以我需要一个更有效的方法.
我考虑的另一件事是类似于找出类路径中的JAR文件,然后为每个JAR并行执行目录列表.但是,我不知道这是否可以从应用程序/如何做到这一点.
奖励积分
任何建议可以按顶级包过滤的方式的人都可以获得奖励积分.例如,显示所有包含在com.xyz==> 下的包com.xyz.*,com.xyz.*.*
谢谢!
我正在为我的应用程序运行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 …
我正在尝试理解Eclipse类路径文件,特别是,我想知道这个:
JRE如何使用它(即JVM是直接读取这个xml文件,还是eclipse以某种方式将其提供给它的内部编译器)?
当我从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&confs=*"/>
<classpathentry kind="output" path="build"/>
</classpath>
Run Code Online (Sandbox Code Playgroud) 我正在尝试第二天的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,所有这些文件似乎都可以正常使用上面提到的命令.只有新文件似乎不会以这种方式加载.
任何帮助赞赏:)
我有一个像这样组织的项目:
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) 我正在尝试在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.
我最近将 IntelliJ IDEA 下载到了另一台计算机上。在一台计算机上它在另一台计算机上工作正常,它给了我这个当前问题。
当我用模板打开一个新项目时,它会自动在任何地方显示错误,即使它允许代码运行并正确显示输出:标准 Java 库类如String和System以红色突出显示,错误工具提示说:“无法解析符号”。
我尝试过“使缓存无效/重新启动”,但没有帮助。
