我有一个Apache Ant构建文件,其中包含一个<javac>命令,该命令需要在构建中使用四个特定的JAR classpath.我试过这样做:
<project basedir=".." default="build_to_jar" name="Transnet Spectrum Analyzer">
<property environment="env"/>
<property name="src" value="src"/>
<property name="libsrc" value="library_sources" />
<property name="build" value="build"/>
<property name="dist" value="dist"/>
<property name="target" value="1.5"/>
<property name="libraries" value="./libraries"/>
<fileset dir="." id="TSA.classpath">
<include name="${libraries}/rxtx/RXTXcomm.jar" />
<include name="${libraries}/commons-logging-1.1.1.jar" />
<include name="${libsrc}/JCommon/jcommon-1.0.15.jar" />
<include name="${libsrc}/JFreeChart/jfreechart-1.0.12.jar" />
</fileset>
<target name="compile" depends="clean,init" description="compile the source " >
<echo>Compile from ${src} to ${build}</echo>
<javac destdir="${build}" source="${target}" target="${target}">
<compilerarg value="-Xlint:unchecked"/>
<src path="${src}"/>
<classpath path="TSA.classpath" />
</javac>
</target>
<!-- blah blah blah --> …Run Code Online (Sandbox Code Playgroud) 有没有人知道在Maven2中设置特定类路径顺序的方法,而不是我现在似乎经历的随机排序?
想要这样做的原因有很多:
jboss jbossall-client 4.2.0.GA
org.hibernate hibernate 3.1
两者都包含:org.hibernate.util.ReflectHelper.class,但jbossall-client版本缺少getFastClass方法.
从谷歌搜索我发现这可能是maven爱好者和面对这个特定问题的人之间争论的焦点,但肯定有合法的原因可以进行类路径排序.
任何解决了这个特殊困境的人的建议都将不胜感激!
谢谢
我有一个有趣的问题,在运行时没有找到org.apache.log4j.Logger类.我正在尝试获得授权,这就是它失败的地方:
OAuthAuthorizer oauthAuthorizer = new OAuthAuthorizer(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET, SAML_PROVIDER_ID, userId);
我正在使用JDeveloper 11.1.1.6.这就是我所知道的:
我查看了我的UI.war/WEB-INF/lib目录,我看到了log4j-1.2.17.jar.
抱怨它的类是org.opensaml.xml.XMLConfigurator
Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/Logger
at org.opensaml.xml.XMLConfigurator.<clinit>(XMLConfigurator.java:60)
at org.opensaml.DefaultBootstrap.initializeXMLTooling(DefaultBootstrap.java:195)
at org.opensaml.DefaultBootstrap.bootstrap(DefaultBootstrap.java:91)
at com.intuit.ipp.aggcat.util.SAML2AssertionGenerator.getSAMLBuilder(SAML2AssertionGenerator.java:156)
at com.intuit.ipp.aggcat.util.SAML2AssertionGenerator.createSubject(SAML2AssertionGenerator.java:187)
at com.intuit.ipp.aggcat.util.SAML2AssertionGenerator.buildAssertion(SAML2AssertionGenerator.java:114)
at com.intuit.ipp.aggcat.util.SAML2AssertionGenerator.generateSignedAssertion(SAML2AssertionGenerator.java:83)
at com.intuit.ipp.aggcat.util.SamlUtil.createSignedSAMLPayload(SamlUtil.java:156)
at com.intuit.ipp.aggcat.util.OAuthUtil.getOAuthTokens(OAuthUtil.java:60)
at com.intuit.ipp.aggcat.core.OAuthAuthorizer.<init>(OAuthAuthorizer.java:85)
at com.incomemax.view.intuit.WebUtil.getAggCatService(WebUtil.java:91)
Run Code Online (Sandbox Code Playgroud)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:305)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:246)
... 64 more
Run Code Online (Sandbox Code Playgroud)我解压缩了XMLConfigurator,奇怪的是它没有导入org.apache.log4j.Logger它使用org.slf4j.Logger,它也在我的jars目录中(slf4j-api-1.7.5.jar).同样有趣的是,第60行(参见堆栈跟踪)是我的反编译中的空行.
当然,如果我在设计时添加Logger.xxxxx,它会发现它很好.
我直接从示例java代码中使用代码/ jar,但导入到我现有的应用程序中.
我一直在网上寻找答案,我相信我已经检查了所有我能想到的领域.我也引用了这个非常好的页面:http://myarch.com/classnotfound/
鉴于授权是使用Intuit Developer API的第1步,我有点卡住了.
从@jhadesdev建议中添加输出:
所有版本的log4j Logger:
从OAuthAuthorizer类的类加载器可以看到所有版本的log4j:
所有版本的XMLConfigurator:
罐子:文件:/ …
对于具有很长类路径的Java应用程序,在使用ps时,我无法看到在arg列表末尾附近指定的主类.我认为这源于我的Ubuntu系统在/ proc/pid/cmdline上的大小限制.我怎样才能增加这个限制?
我正在尝试在Windows XP命令行上手动运行特定的JUnit测试,该命令行在类路径中具有异常多的元素.我尝试了几种变体,例如:
set CLASS_PATH=C:\path\a\b\c;C:\path\e\f\g;....
set CLASS_PATH=%CLASS_PATH%;C:\path2\a\b\c;C:\path2\e\f\g;....
...
C:\apps\jdk1.6.0_07\bin\java.exe -client oracle.jdevimpl.junit.runner.TestRunner com.myco.myClass.MyTest testMethod
Run Code Online (Sandbox Code Playgroud)
(其他变体是将类路径全部设置在一行上,通过-classpath将类路径设置为java的参数").它始终归结为控制台抛出它的错误:
The input line is too long.
The syntax of the command is incorrect.
Run Code Online (Sandbox Code Playgroud)
这是一个JUnit测试,测试一个相当大的现有遗留项目,所以没有关于重新安排我的目录结构更合理的建议,这些类型的解决方案暂时没有.我只是试图对这个项目进行快速测试并在命令行上运行它,控制台正在阻止我.救命!
有人能告诉我在Netbeans中设置类路径的位置和方式吗?我想添加一个.jar文件.
我正在尝试为我的应用程序创建一个插件系统,我想从简单的东西开始.每个插件都应该打包在.jar文件中并实现SimplePlugin接口:
package plugintest;
public interface SimplePlugin {
public String getName();
}
Run Code Online (Sandbox Code Playgroud)
现在我创建了一个SimplePlugin包装在.jar中的实现,并将其放在主应用程序的plugin /子目录中:
package plugintest;
public class PluginTest implements SimplePlugin {
public String getName() {
return "I'm the plugin!";
}
}
Run Code Online (Sandbox Code Playgroud)
在主应用程序中,我想获得一个实例PluginTest.我尝试了两种方法,都使用了java.util.ServiceLoader.
1.动态扩展类路径
这使用已知的hack在系统类加载器上使用反射来避免封装,以便添加URL类路径.
package plugintest.system;
import plugintest.SimplePlugin;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Iterator;
import java.util.ServiceLoader;
public class ManagePlugins {
public static void main(String[] args) throws IOException {
File loc = new File("plugins");
extendClasspath(loc);
ServiceLoader<SimplePlugin> sl …Run Code Online (Sandbox Code Playgroud) 从我的读数来看,执行命令时如下:
java -jar foo.jar
Run Code Online (Sandbox Code Playgroud)
然后忽略主类路径,并从清单文件中获取类路径.
此外,还会忽略在命令行上声明的类路径.所以在:
java -classpath /usr/local/jar/foobar.jar -jar foo.jar
Run Code Online (Sandbox Code Playgroud)
/usr/local/jar/foobar.jar被忽略.
最后,我已经读过清单文件只能在jar文件中包含相对路径.
那么,如何包含系统中存在的外部jar的绝对路径,而不是正在执行的jar文件中?
我想做类似的事情jython -cp FOO:BAR:BAZ argle.py.
如果我添加FOO,BAR和BAZ,$CLASSPATH这是有效的.我尝试sys.path在运行时添加它们,但这似乎不适用于jar.如果我在运行时添加扩展jar的路径,它确实有效sys.path.是否有一个简单的替代方案来爆炸jar文件?$CLASSPATH为每个运行此脚本的用户进行扩充是不可接受的替代方案.
谢谢.
在下面的构建文件中,jar目标引用了manifest class-path的jar.class.path属性.编译目标引用project.class.path
这里有冗余,因为jar.class.path和project.class.path非常相似.添加库时必须更新它们,如果库列表变得很长,这可能会很麻烦.有没有更好的办法?任何解决方案都必须是跨平台的,并始终使用相对路径.
编辑:
它应该从文件集生成JAR类路径,而不是相反,所以我可以使用通配符,例如在目录中包含所有JAR文件.
<?xml version="1.0"?>
<project name="Higgins" default="jar" basedir=".">
<property name="jar.class.path" value="lib/forms-1.2.0.jar lib/BrowserLauncher.jar"/>
<path id="project.class.path">
<pathelement location="build"/>
<fileset dir="lib">
<include name="forms-1.2.0.jar"/>
<include name="BrowserLauncher.jar"/>
</fileset>
</path>
<target name="prepare">
<mkdir dir="build"/>
</target>
<target name="compile" depends="prepare" description="Compile core sources">
<javac srcdir="src"
includes="**"
destdir="build"
debug="true"
source="1.5">
<classpath refid="project.class.path"/>
</javac>
</target>
<target name="jar" depends="compile" description="Generates executable jar file">
<jar jarfile="higgins.jar">
<manifest>
<attribute name="Main-Class" value="nl.helixsoft.higgins.Main"/>
<attribute name="Class-Path" value="${jar.class.path}"/>
</manifest>
<fileset dir="build" includes="**/*.class"/>
<fileset dir="src" includes="**/*.properties"/>
</jar>
</target>
</project>
Run Code Online (Sandbox Code Playgroud)