我有一个简单的类从另一个jar导入另一个类.一切都很好,但试图运行它...
$ jar tvf ../../pig-2.1.jar | grep TupleFact
1641 Mon Feb 02 17:56:32 UTC 2009 org/apache/pig/data/DefaultTupleFactory.class
2289 Mon Feb 02 17:56:30 UTC 2009 org/apache/pig/data/TupleFactory.class
$ javac ../src/Convert.java -classpath `echo ../lib/* ../../lib/* | sed 's/ /:/g'`
$ java Convert -classpath `echo ../lib/* ../../lib/* | sed 's/ /:/g'`
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/pig/data/TupleFactory
at Convert.<clinit>(Convert.java:31)
Caused by: java.lang.ClassNotFoundException: org.apache.pig.data.TupleFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
... 1 more
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?你是如何开始调试的?
我是java开发的新手,我只想在构建系统中使用javac.我正在使用java为其他人编写的程序添加一个功能,特别是涉及GeoTiff图像.
我在网上发现了一个我想要使用的课程,但是我无法建立课程,无论我做什么,我都会得到这样的信息:
javac GeoTiffIIOMetadataAdapter.java
GeoTiffIIOMetadataAdapter.java:11: package com.sun.media.imageio.plugins.tiff does not exist
import com.sun.media.imageio.plugins.tiff.GeoTIFFTagSet;
Run Code Online (Sandbox Code Playgroud)
我在RHEL5上,所以我安装了我认为需要的软件包,jai-imageio-core.x86_64. 但问题仍然存在.我认为我没有正确设置一些变量(比如-sourcepath或者其他东西).我将不胜感激任何帮助.
我已经尝试在eclipse中打开类文件,我已经从我导入到项目中的jar中复制了粘贴,并且我收到了第一个错误:
org.eclipse.core.runtime.CoreException:类文件不在类路径中.
显然我已经将类文件错误地包含在我的项目中.我需要使用这个类文件来访问Java applet.建议请
我已经下载了common.codec二进制jar文件.现在我想使用这个类org.apache.commons.codec.binary.Base64.但这个文件夹包含四个jar文件,即common.codec-1.7.jar,commons-codec-1.7-javadoc.jar,commons-codec-1.7-sources,commons-codec-1.7-tests,commons-codec-1a.7-test-sources.现在我应该在课程路径中提到哪条路径?我尝试使用所有jar文件路径并在我的程序中导入但失败了.请告诉我在哪里放置这个下载的jar文件以及如何在我的代码中使用它.
当我想从http://groovy-lang.org/download.html下载 groovy 时,我得到了“二进制版本”。这意味着我有一个带有lib和bin和embeddable文件夹的目录结构。在bin文件夹中有一个groovyshell 脚本,让我可以执行我自己的 groovy 源文件。此groovyshell 脚本使用lib目录中的 jars 。但是,我希望它使用embeddable目录中groovy-all-jar 中的 jars 。原因是,我不希望jar在我的类路径中的目录中的所有 jars,因为我需要使用不同的版本。
如何groovy使用 groovy-all-jar制作shell 脚本?
我需要使用默认的 JRE/JDK 命令行工具检查当前目录中是否有特定的类可用。
我可以构建自己的类来列出它或检查是否可以从当前目录和当前 CLASSPATH 环境变量中访问特定类,但是此选项不可用,因为我需要检查特定类名是否在受保护的生产中可用环境(只读)。
我正在尝试编写一个脚本,它将自动执行我经常执行的一些任务.我的文件的文件夹结构是这样的:
./
sampleScript.sh
src/SampleProgram.java
Run Code Online (Sandbox Code Playgroud)
除此之外,我的Java程序依赖于ojdbc6.jar驻留的文件~/sampleFolder/lib.
我试图在我的脚本中编译和运行Java程序,如下所示:
javac -cp "$CLASSPATH:~/sampleFolder/lib/ojdbc6.jar:./src" src/SampleProgram.java
java -cp "$CLASSPATH:~/sampleFolder/lib/ojdbc6.jar:./src" SampleProgram
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用.它似乎在我的程序中检查ojdbc6.jar依赖项的步骤失败.-cp基于此文件夹结构分配我的正确方法是什么?
这个想法很简单,我想直接在我的构建脚本中访问项目类。
我第一次尝试:
apply plugin: 'java'
tasks.create(name: 'randomTask', type: SourceTask) {
source.each {
println it
}
}
Run Code Online (Sandbox Code Playgroud)
遗憾的是得到了零个文件。
然后我决定尝试 compileJava:
apply plugin: 'java'
compileJava {
source.each {
println it
}
}
Run Code Online (Sandbox Code Playgroud)
虽然我确实得到了一个将被编译的文件列表,但它并不是我真正需要的。我想获取文件的 Class 对象。
因此,例如,如果我有com.example.SomeClass,我希望得到Class<com.example.SomeClass>这样我可以在这些类上使用反射。
这是我想要的一个非工作示例:
apply plugin: 'java'
tasks.create(name: 'randomTask', type: SomeMagicalType) {
UMLBuilder builder = UMLBuilder.builder()
classes.each { clazz ->
clazz.methods.each { method ->
builder.addMethod(method)
}
}
builder.build().writeToFile(file('out/application.uml'))
}
Run Code Online (Sandbox Code Playgroud)
PS:我使用的是 Gradle 2.5 和 Java 8
我正在编写一个 gradle 插件来json-schema在我的项目中生成一个for beans。我的目标是在构建过程中生成和发布模式,这样我就不需要手动更新它。
目前,我传递project.compileJava.inputs.files给我的任务并使用它来构建一个URLClassLoader. 然后我将这些类传递给模式生成器。
为了确保正确生成 json 模式,我想使用ObjectMapper来自目标应用程序的 。不幸的是,我在该模块的深处ObjectMapper添加了 jackson Hibernate5Module.,它尝试检查我的类是否可以分配给 aHibernateProxy,并且因为HibernateProxy它加载了 Gradle 的类加载器,并且我的类加载了URLClassLoader所有内容都会爆炸。
我可以删除 Hibernate 模块,但这仍然会在其他类似情况下触发该错误,并且它使我的插件不易分发。所以我需要一种在运行时向 gradle 的类路径或默认类加载器添加新条目的方法。
作为参考,以下是相关代码片段:
目标项目的 build.gradle
jsonSchema {
classpath = project.compileJava.inputs.files
}
Run Code Online (Sandbox Code Playgroud)
公共类 WriteJsonSchema 扩展了 DefaultTask
@TaskAction
public void write() throws ClassNotFoundException, IOException {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new Hibernate5Module());
mapper.registerModule(new Jdk8Module());
mapper.registerModule(new JavaTimeModule());
mapper.configure(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS, false);
mapper.configure(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS, false);
Set<File> files = getClasspath().getFiles();
List<URL> …Run Code Online (Sandbox Code Playgroud) 我们计划将 tomcat 服务器(我们当前使用的版本是 7)迁移到版本 9,目前我们正在使用 VirtualWebAppLoader 类来创建自定义类路径,即从外部文件夹加载 jars。但是在 Tomcat 9 中,这个加载器类不再可用。如何在 tomcat 9 中实现这一目标?