我们有一个可以部署在许多应用服务器上的Web应用程序,包括Oracle 10g.但是,在该平台上,我们遇到了类路径问题.webapp使用JAXB 2,但Oracle 10g附带JAXB 1,这导致错误.为了解决这些问题,我们将Oracle配置为更喜欢我们的webapp中的类,但现在我们在尝试实例化JAXB上下文时遇到了上述错误.
查看"加载器约束违反"异常 - 当一个已经加载了一个类加载器的类试图访问同一个包中的包私有但由不同的类加载器加载的类时,它似乎被抛出.我已经尝试删除我们的webapp中包含javax.xml.namespace.QName的任何jar,并且已经验证它是正在被拾取的Oracle中包含的实例,但是仍然会发生错误.有任何想法吗?
(这是关于10g和JAXB 2 的早期问题的后续内容.)
我开始玩Clojure了,我的Java经验非常有限.我来自Ruby和OO的动态世界,因此功能方面非常有趣!
无论如何,当我发现库和各种使用工具(以及Pragmatic Clojure Book的教程文件)时,所有内容通常都要求将文件放在CLASSPATH中,以便Clojure可以查看库以供使用.
有没有好的CLASSPATH练习?我是否只想要一个只有我需要的外部文件库的CLASSPATH,或者我可以继续在目录中抛出我需要的任何库或文件,只需将其定义为我的CLASSPATH并且只需要所需的东西?
如果它有帮助,我是OSX和Emacs用户(使用slime和swank-clojure).
我希望启用用户定义的Clojure脚本来与我的Java App进行交互.问题是,我事先并不知道Clojure脚本的位置,所以在运行应用程序时我不能将它们包含在我的类路径中.
如何从类路径外部动态加载Clojure脚本?
我试过这个简单的例子:
RT.loadResourceScript("test.clj");
Var foo = RT.var("user", "foo");
Object result = foo.invoke("Hi", "there");
System.out.println(result);
Run Code Online (Sandbox Code Playgroud)
使用看起来像的test.clj:
(ns user)
(defn foo [a b]
(str a " " b))
Run Code Online (Sandbox Code Playgroud)
但没有运气.
我认为它与RT.makeClassLoader()或RT.baseLoader()使用返回的加载器加载clojure文件有关,但我似乎无法使其工作.(我一直在接受ClassNotFound)我可能会为javadoc而糊里糊涂clojure.lang.RT,但我根本找不到它们.
我想在build.xml中启动一个applet,如下所示:
<java classname="sun.applet.AppletViewer" classpath="${libraries}">
</java>
Run Code Online (Sandbox Code Playgroud)
(至少它是如何在netbeans中工作)
但我收到错误信息:
[java] JVM args ignored when same JVM is used.
[java] Could not find sun.applet.AppletViewer. Make sure you have it in your classpath
[java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:138)
[java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:764)
[java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:218)
[java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:132)
[java] at org.apache.tools.ant.taskdefs.Java.execute(Java.java:105)
[java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
[java] at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
[java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[java] at java.lang.reflect.Method.invoke(Method.java:597)
[java] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[java] at org.apache.tools.ant.Task.perform(Task.java:348)
[java] at org.apache.tools.ant.Target.execute(Target.java:357)
[java] at org.apache.tools.ant.Target.performTasks(Target.java:385)
[java] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
[java] at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38)
[java] at org.eclipse.ant.internal.launching.remote.EclipseSingleCheckExecutor.executeTargets(EclipseSingleCheckExecutor.java:30)
[java] at …Run Code Online (Sandbox Code Playgroud) 我正在将现有项目从ant转换为Gradle.
不幸的是,有一个Java类使用com.sun.xml.internal.bind.DatatypeConverterImpl.有一件事我会考虑更换这种用法,但此时我只是好奇为什么Gradle找不到那个类,导致编译失败.
信息是
package com.sun.xml.internal.bind does not exist
Run Code Online (Sandbox Code Playgroud)
请注意,它在eclipse中编译良好以及使用javac ant任务.JAVA_HOME设置为1.6.0_27.
那么Gradle的独特之处在于默认情况下它会导致它找不到这个类,怎么可能有人解决这个问题呢?
请参阅Java代码段,后跟build.gradle文件:
final class Test{
private static final javax.xml.bind.DatatypeConverterInterface DTC = com.sun.xml.internal.bind.DatatypeConverterImpl.theInstance;
.....
DTC.printDateTime(Calendar.getInstance());
}
Run Code Online (Sandbox Code Playgroud)
apply plugin: 'java'
apply plugin: 'application'
mainClassName = "com.foo.bar.Test"
sourceCompatibility = 1.6
version = '5.4.0'
jar {
manifest {
attributes 'Implementation-Title': 'Foo', 'Implementation-Version': version, 'Implementation-Vendor': 'Bar'
}
}
repositories {
mavenCentral()
}
dependencies {
compile group: 'commons-lang', name: 'commons-lang', version: '2.4'
compile group: 'com.google.guava', name: 'guava', version: '10.0.1'
compile group: 'org.hibernate.javax.persistence', name: 'hibernate-jpa-2.0-api', version: '1.0.1.Final' …Run Code Online (Sandbox Code Playgroud) 我的项目.classpath文件中有以下记录:
<classpathentry kind="src" path="src/main/webapp"
output="build/webapp"/>
<classpathentry kind="src" path="src/main/java"
output="build/webapp/WEB-INF/classes"/>
<classpathentry kind="src" path="src/main/resources"
output="build/webapp/WEB-INF/classes"/>
Run Code Online (Sandbox Code Playgroud)
我的意图是
src/main/webapp到build/webappsrc/main/java成build/webapp/WEB-INF/classessrc/main/resources到build/webapp/WEB-INF/classes然而结果却是,
src/main/webapp到build/webappbuild/webapp/WEB-INF/classes永远存在,但保持src/main/webapp和之间的确切副本build/webappbuild/webapp/WEB-INF/classes永远不会创建哪种方式,步骤2和3永远不会成功.
我甚至尝试将第1步修改为
<classpathentry kind="src" path="src/main/webapp" output="build/webapp"
excluding="WEB-INF/classes/**"/>
Run Code Online (Sandbox Code Playgroud)
这根本没有帮助.
classpathentry记录的顺序是无关紧要的.
Q1. 请帮助建议我应该如何编写classpathentry记录以将它们分层地组合到同一个输出目录中,以便更高文件夹层次结构的classpathentry不会使较低文件夹层次结构的classpathentry无效.
Q2.
顺便说一句,我找不到eclipse .classpath文件的xml标签和标签属性的任何文档规范.我试过谷歌搜索"eclipse classpathentry"无济于事.有人还可以给我指一份文件吗?
我很乐意使用EnumeratedIntegerDistribution()从中org.apache.commons.math3.distribution获取离散的概率分布
int[] nums_to_generate = new int[] { -1, 1, 0 };
double[] discrete_probabilities = new double[] { 0.4, 0.4, 0.2 };
Run Code Online (Sandbox Code Playgroud)
我正在Windows XP的jdk7上运行,从命令行运行
我做:
添加到我的源文件
import org.apache.commons.math3;
Run Code Online (Sandbox Code Playgroud)用类路径编译我的源代码:
javac -cp ./commons-math3-3.2/commons-math3-3.2.jar:. ConflictsAnimation.java
javac -cp commons-math3-3.2/commons-math3-3.2.jar ConflictsAnimation.java
Run Code Online (Sandbox Code Playgroud)还是我有一个神秘的
"error: package org.apache.commons does not exist"
Run Code Online (Sandbox Code Playgroud)
谁知道会发生什么?我真的需要帮助
注意:
没有类路径,也没有导入“ apache”和对numeratedIntegerDistribution()的调用,编译(和运行)就可以了。
带有类路径但没有“ appache”的编译会产生无意义的错误。
预先感谢您的出色技能,程序员!
import java.lang.Math.*;
import org.apache.commons.math3;
public class CheckMe {
public CheckMe() {
System.out.println("let us check it out");
System.out.println(generate_rand_distribution (10));
}
private static int[] generate_rand_distribution (int …Run Code Online (Sandbox Code Playgroud) 在添加context-param和Log4jConfigListener之前Log4j2,我在catalina.out文件中列出了所有日志.
所以现在,我正在尝试配置log4j我的Web应用程序.
在web.xml,我添加了必要的配置.
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>etl-service</display-name>
<!-- Support for Spring -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext.xml</param-value>
</context-param>
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>myprofile</param-value>
</context-param>
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>/WEB-INF/classes/log4j2.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.util.Log4jConfigListener
</listener-class>
</listener>
</web-app>
Run Code Online (Sandbox Code Playgroud)
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace" strict="true" name="XMLConfigTest"
packages="">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<RollingRandomAccessFile name="RollingRandomAccessFileDebug" fileName="/local/deploy/logs/debug.log"
filePattern="logs/$${date:yyyy-MM}/etl-%d{MM-dd-yyyy}-%i.log.gz"
immediateFlush="false"
append="false">
<PatternLayout>
<Pattern>%d …Run Code Online (Sandbox Code Playgroud) 在ubuntu上的openjdk-1.7.0_55上我得到了异常:
com.sun.org.apache.xml.internal.serializer.utils.WrappedRuntimeException:无法为输出方法'xml'加载属性文件'output_xml.properties'
这可能是类路径问题吗?
我可以在/usr/lib/jvm/java-1.7.0-openjdk-amd64/jre/lib/resources.jar中找到"output_xml.properties".
任何帮助表示赞赏.
谢谢!
JShell是Java的REPL.要在默认JRE之外使用其他类,它包含一个/classpath命令,用于添加当前类路径的路径.
有没有办法在JShell环境中查看当前的类路径?
请注意,我正在使用以下早期版本:
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+111)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+111, mixed mode)
Run Code Online (Sandbox Code Playgroud)