可运行 Jar 文件 - src 文件路径问题

Posted

技术标签:

【中文标题】可运行 Jar 文件 - src 文件路径问题【英文标题】:Runnable Jar file - src file path issue 【发布时间】:2014-02-17 10:50:39 【问题描述】:

我必须阅读脚本包中所有可用的 java 文件名来执行特定的方法。 下面的代码使用 eclipse 可以正常工作。 我想使用 Runnable Jar 运行测试 - 因为 strTestScriptsPath = "src/com/xyz/test/scripts" 包含 src,它正在失败 (否则我必须将 src 文件夹提供给 JAR 文件才能成功运行)

在这种情况下如何使用 this.getClass().getResourceAsStream()

注意:我试图给出目录的路径而不是文件。我只需要从上面的代码中获取文件名:(

        public static boolean executeKeyword(String keyword)
            String strTestScriptsPath = "src/com/xyz/test/scripts";     

            File folder = new File( strTestScriptsPath );

            File[] listOfFiles = folder.listFiles();

            boolean booFindMethod = false;
            findKeyword:
            for(File file: listOfFiles )


                strJavaClassFileName = FilenameUtils.removeExtension( file.getName());                          
                strJavaClassFileName =  "com.xyz.test.scripts." + strJavaClassFileName;             

                System.out.println(strJavaClassFileName);

                // Reflection API code to call the required method from the class
                ..
                ..

            
        

【问题讨论】:

jar 文件应该位于 ../src 【参考方案1】:

Hanuman,如果你想创建一个可运行的 jar,你需要通过提供完全限定的类名来配置清单文件。除此之外,这个类应该有:

    public static void main(String[] args) 

详细信息请访问:http://introcs.cs.princeton.edu/java/85application/jar/jar.html

【讨论】:

@Nikhil,感谢您的回复。我提供了具有 main 方法的 Main 类并且 JAR 正在运行。这里的问题是代码中的路径。请再次阅读问题 1.您是否对该文件夹具有读取权限。 2. com.xyz.test.scripts. 是准确的,如果您可以发布您的项目结构的图像会有所帮助。 3. 您是否已将测试包作为 JAR 的一部分包含在内?请使用命令检查它:jar tf jar-file-name 正如我所说,这是行 strTestScriptsPath = "src/com/xyz/test/scripts"; 的问题由于 JAR 文件包含 com/xyz/test/scripts 作为文件结构,因此无法找到 src。 你能从 JAR 文件中排除 src 文件夹并使用 -- String strTestScriptsPath = "com/xyz/test/scripts"; ——看看这是否有效。另外,如果可能,请发布您的项目结构的图片。【参考方案2】:

从网上得到了解决方案。 这是可以从 JAR 文件的包中获取类列表的方法。

 public static List<String> getJarFileListing(String jarLocation, String filter) 
        List<String> files = new ArrayList<String>();
        if (jarLocation == null) 
            return files; // Empty.
        

        // Lets stream the jar file 
        JarInputStream jarInputStream = null;
        try 
            jarInputStream = new JarInputStream(new FileInputStream(jarLocation));
            JarEntry jarEntry;

            // Iterate the jar entries within that jar. Then make sure it follows the
            // filter given from the user.
            do 
                jarEntry = jarInputStream.getNextJarEntry();
                if (jarEntry != null) 
                    String fileName = jarEntry.getName();

                    // The filter could be null or has a matching regular expression.
                    if (filter == null || fileName.matches(filter)) 
                        files.add(fileName);
                    
                
            
            while (jarEntry != null);
            jarInputStream.close();
        
        catch (IOException ioe) 
            throw new RuntimeException("Unable to get Jar input stream from '" + jarLocation + "'", ioe);
        
        return files;
    

并调用上面的函数..

    public static void main(String args[]) throws IOException
    List<String> listOfFiles = getJarFileListing("C:\Users\abc\xyz.jar","^com/xyz/test/scripts(.*)");
    /* Reflection API code */
    
    

【讨论】:

以上是关于可运行 Jar 文件 - src 文件路径问题的主要内容,如果未能解决你的问题,请参考以下文章

Java:如何在可运行的 Jar 文件中打包和访问资源?

无法运行java,没有那个文件或目录启动javajar包

包含 Eclipse 和可运行 Jar 的资源

java打包的路径问题

java 工程里有配置文件 打包成jar文件 找不到配置文件的路径 这个路径该怎么写!!

jar包中配置文件的路径