标签: classpath

让Ant <javac>识别类路径

我有一个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)

java ant classpath

42
推荐指数
3
解决办法
8万
查看次数

Maven类路径顺序问题

有没有人知道在Maven2中设置特定类路径顺序的方法,而不是我现在似乎经历的随机排序?

想要这样做的原因有很多:

  • 供应商提供了一个补丁jar,它包含以前发布的jar的覆盖类,因此补丁jar必须首先出现在类路径排序中.
  • 通过遍历pom依赖项发现的类路径上找到的两个jar包含具有不同签名的相同包中的相同类.例如:

jboss jbossall-client 4.2.0.GA

org.hibernate hibernate 3.1

两者都包含:org.hibernate.util.ReflectHelper.class,但jbossall-client版本缺少getFastClass方法.

从谷歌搜索我发现这可能是maven爱好者和面对这个特定问题的人之间争论的焦点,但肯定有合法的原因可以进行类路径排序.

任何解决了这个特殊困境的人的建议都将不胜感激!

谢谢

maven-2 classpath

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

引起者:java.lang.NoClassDefFoundError:org/apache/log4j/Logger

我有一个有趣的问题,在运行时没有找到org.apache.log4j.Logger类.我正在尝试获得授权,这就是它失败的地方:

OAuthAuthorizer oauthAuthorizer = new OAuthAuthorizer(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET, SAML_PROVIDER_ID, userId);

我正在使用JDeveloper 11.1.1.6.这就是我所知道的:

  1. 我查看了我的UI.war/WEB-INF/lib目录,我看到了log4j-1.2.17.jar.

  2. 抱怨它的类是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)
  3. 我解压缩了XMLConfigurator,奇怪的是它没有导入org.apache.log4j.Logger它使用org.slf4j.Logger,它也在我的jars目录中(slf4j-api-1.7.5.jar).同样有趣的是,第60行(参见堆栈跟踪)是我的反编译中的空行.

  4. 当然,如果我在设计时添加Logger.xxxxx,它会发现它很好.

  5. 我直接从示例java代码中使用代码/ jar,但导入到我现有的应用程序中.

我一直在网上寻找答案,我相信我已经检查了所有我能想到的领域.我也引用了这个非常好的页面:http://myarch.com/classnotfound/

鉴于授权是使用Intuit Developer API的第1步,我有点卡住了.

从@jhadesdev建议中添加输出:

所有版本的log4j Logger:

  • 邮编:C:/Users/Chris/AppData/Roaming/JDeveloper/system11.1.1.6.38.61.92/DefaultDomain/servers/DefaultServer/tmp/_WL_user/j2ee-app/lt5l71/war/WEB-INF/lib/log4j-1.2 .17.jar!/org/apache/log4j/Logger.class

从OAuthAuthorizer类的类加载器可以看到所有版本的log4j:

  • 邮编:C:/Users/Chris/AppData/Roaming/JDeveloper/system11.1.1.6.38.61.92/DefaultDomain/servers/DefaultServer/tmp/_WL_user/j2ee-app/lt5l71/war/WEB-INF/lib/log4j-1.2 .17.jar!/org/apache/log4j/Logger.class

所有版本的XMLConfigurator:

  • 罐子:文件:/ …

java logging classpath classloader intuit-partner-platform

42
推荐指数
4
解决办法
20万
查看次数

如何增加/ proc/pid/cmdline 4096字节限制?

对于具有很长类路径的Java应用程序,在使用ps时,我无法看到在arg列表末尾附近指定的主类.我认为这源于我的Ubuntu系统在/ proc/pid/cmdline上的大小限制.我怎样才能增加这个限制?

linux limits pid process classpath

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

如何在Windows中设置长Java类路径?

我正在尝试在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测试,测试一个相当大的现有遗留项目,所以没有关于重新安排我的目录结构更合理的建议,这些类型的解决方案暂时没有.我只是试图对这个项目进行快速测试并在命令行上运行它,控制台正在阻止我.救命!

java junit classpath

40
推荐指数
3
解决办法
6万
查看次数

如何在Netbeans中设置类路径?

有人能告诉我在Netbeans中设置类路径的位置和方式吗?我想添加一个.jar文件.

java netbeans classpath

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

使用ServiceLoader动态加载插件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 classpath serviceloader

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

运行java -jar时包含外部jar

从我的读数来看,执行命令时如下:

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文件中?

java jar manifest.mf classpath

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

当我调用Jython*而没有*将它们添加到$ CLASSPATH时,如何将jar添加到类路径?

我想做类似的事情jython -cp FOO:BAR:BAZ argle.py.

如果我添加FOO,BARBAZ,$CLASSPATH这是有效的.我尝试sys.path在运行时添加它们,但这似乎不适用于jar.如果我在运行时添加扩展jar的路径,它确实有效sys.path.是否有一个简单的替代方案来爆炸jar文件?$CLASSPATH为每个运行此脚本的用户进行扩充是不可接受的替代方案.

谢谢.

jython jar classpath

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

从Ant中的<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)

ant jar manifest classpath

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