Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将不同驱动器中的jar包含到jar文件的清单文件中_Java_Maven_Jar_Classpath_Manifest - Fatal编程技术网

Java 如何将不同驱动器中的jar包含到jar文件的清单文件中

Java 如何将不同驱动器中的jar包含到jar文件的清单文件中,java,maven,jar,classpath,manifest,Java,Maven,Jar,Classpath,Manifest,我正在开发一个遗留应用程序,它使用包org.apache.tools.ant.taskdefs使用ant task生成Javadoc。在这里,我需要传递maven给出的类路径。这个类路径在maven本地存储库中主要有jar路径 Javadoc javadoc = new Javadoc(); javadoc.setUseExternalFile(true); javadoc.setProject(proj); javadoc.set

我正在开发一个遗留应用程序,它使用包
org.apache.tools.ant.taskdefs
使用ant task生成Javadoc。在这里,我需要传递maven给出的类路径。这个类路径在maven本地存储库中主要有jar路径

        Javadoc javadoc = new Javadoc();
        javadoc.setUseExternalFile(true);
        javadoc.setProject(proj);
        javadoc.setClasspath(new Path(proj, classpath));
问题是该类路径足够长,因此不允许在Windows上执行,从而导致以下错误

enterJavadoc failed: java.io.IOException: Cannot run program "C:\jdk1.8.0_144\bin\javadoc.exe": CreateProcess error=206, The filename or extension is too long code here
对于这个问题,我所做的是创建一个路径jar,它在其清单文件中包含长类路径。所以我添加这个jar文件作为Javadoc任务的类路径。我在ant中使用ManifestClassPath任务为我的长类路径中的JAR生成相对路径

    ManifestClassPath mc = new ManifestClassPath();
    mc.setProject(proj);
    mc.addClassPath(new Path(proj, classPath));
    mc.setJarFile(new File(pathingJar));
    mc.setProperty("classpath");
    mc.setMaxParentLevels(20);
    mc.execute();
    Jar jar = new Jar();
    Manifest manifest = new Manifest();
    Manifest.Attribute attribute = new Manifest.Attribute();
    attribute.setName("Class-Path");
    attribute.setValue(proj.getProperty("classpath"));
    manifest.addConfiguredAttribute(attribute);
    jar.addConfiguredManifest(manifest);
    jar.setDestFile(new File(pathingJar));
    jar.setProject(proj);
    jar.execute();
    javadoc.setClasspath(new Path(proj, pathingJar));
这个解决方案一直有效,直到我在maven本地存储库所在的同一个驱动器中开发它为止。但是maven local repository位于不同的驱动器中,它会失败,因为它无法为不同的驱动器生成相对路径。然后,我尝试使用如下文件协议处理类路径

Class-Path: file:///C:/mvn_repo/...  file:///C:/mvn_repo/... ...

由于Javadoc任务失败,此解决方案似乎无法工作。有没有其他方法可以尝试使用路径jar来修复这个长类路径问题?

正如@marqueisoflorne所提到的,你不能

清单中的类路径条目是相对URL

无论如何,您可以使用带有文件夹链接的变通方法。在pathing jar的驱动器上,可以创建指向maven目录的文件夹链接。文件夹链接可以指向另一个驱动器

mklink /J "mvn_repo_link" "C:\mvn_repo". 

然后你可以通过
mvn\u repo\u link
子目录使用相对路径

你能给我们分享一下错误日志吗?这是包org.gradle.api.tasks.javadoc.javadoc吗?@JRichardsz请查看我的更新问题。我正在使用org.apache.tools.ant.taskdefs包,但您不能。清单中的类路径条目是相对URL,它们相对于包含JAR文件的位置进行解释。您不能在其中放置任何描述的绝对路径。@除了使用jar文件,还有其他方法吗。我无法编辑CLASSPATH环境变量或使用通配符,因为CLASSPATH包含来自maven local repo的jar,所以我需要使用jar,并使用您尝试使用的链接的确切版本ID?在pathing jar的驱动器上,您可以创建到maven目录的文件夹链接<代码>mklink/J“mvn\u repo\u link”C:\mvn\u repo“。然后您可以通过
mvn\u repo\u link
目录使用相对路径。