当前位置: 首页 > 面试题库 >

从单个源文件夹中获取多个jar

濮佑运
2023-03-14
问题内容

到目前为止,我们有一个项目结构src,其中包含名为的单个源文件夹,其中包含三个模块的源代码。我想做的是:

1)编译源代码。这可以通过sourceSets定义轻松完成:

sourceSets {
    main {
        java {
            srcDir 'src'
        }
    }
}

2)将编译结果放入三个jar中。我通过三个“ jar”类型的任务来做到这一点:

我现在通过三个单独的任务来执行此操作:

  • util.jar

    task utilJar(type: Jar) {
    from(sourceSets.main.output) {
        include "my/util/package/**"
    }
    

    }

  • client.jar

    task clientJar(type: Jar) {
    from(sourceSets.main.output) {
        include "my/client/package/**"
    }
    

    }

  • server.jar

    task serverJar(type: Jar) {
    from(sourceSets.main.output) {
        include "**"
    }
    excludes.addAll(utilJar.includes)
    excludes.addAll(clientJar.includes)
    

    }

问题是server.jar应该包含client.jarand 中不包含的所有类util.jar。在ant
build脚本中,我们通过使用differenceant任务解决了这个问题。如何做到这一点(我当前的方法不起作用)?

也许我的方法是完全错误的。请指教。

PS到目前为止,我们不能更改项目源代码文件夹的结构。


问题答案:

我将在这里发布我的工作解决方案作为答案(在gradle的论坛上有一个提示)。

gradle中的作用域非常奇怪:)我认为每个任务定义都会创建一个“任务”类的对象,在这种特定情况下,它类似于“
JarTask”。然后,我可以从build.gradle脚本中的任何位置访问该类的任何属性。但是,我找到了唯一可以看到模式的位置,这些模式包含在jar文件中-在from一个任务块内。因此,我目前的工作解决方案是:

1)定义项目级集合以包含要从中排除的模式 server.jar

2)排除任务from块中的所有模式serverJar

请在下面查看最终版本

sourceSets {  
    main {  
        java {  
            srcDir 'src'  
        }  
    }  
}

// holds classes included into client.jar and util.jar, so they are to be excluded from server.jar
ext.serverExcludes = []

// util.jar
task utilJar(type: Jar) {  
    from(sourceSets.main.output) {  
        include "my/util/package/**" 
        project.ext.serverExcludes.addAll(includes)
    }  
}

// client.jar
task clientJar(type: Jar) {  
    from(sourceSets.main.output) {  
        include "my/client/package/**"
        project.ext.serverExcludes.addAll(includes)
    }  
}

// server.jar
task serverJar(type: Jar) {  
    from(sourceSets.main.output) {  
        exclude project.ext.serverExcludes
    }  
}


 类似资料:
  • 问题内容: 我想知道如何从单个文件夹中读取多个文件(无需指定文件名,只是它们是json文件)。 另外,有可能将它们转换为DataFrame吗? 能给我一个基本的例子吗? 问题答案: 一种选择是使用os.listdir列出目录中的所有文件,然后仅查找以’.json’结尾的文件: 现在,您可以使用pandas DataFrame.from_dict将json(此时为python字典)读入pandas数

  • 问题内容: 我在项目的根目录中有一个资源文件夹/程序包,我“不想”加载某个文件。如果我想加载某个文件,我将使用class.getResourceAsStream,我会很好的!我实际上想要做的是在资源文件夹中加载一个“文件夹”,循环访问该文件夹中的文件,并获取每个文件的流,并读取内容…假设在运行时之前未确定文件名… 我该怎么办?有没有一种方法可以获取jar文件中“文件夹”中文件的列表?请注意,带有资

  • 我有一个资源文件夹/包在我的项目的根,我“不”想加载某个文件。如果我想加载某个文件,我会使用class.getResourceStream,我会很好!!我实际上想要做的是在资源文件夹中加载一个“文件夹”,循环该文件夹中的文件,并获得每个文件的流并读取内容...假设在运行时之前未确定文件名...我该怎么办?有没有一种方法可以在你的jar文件中得到一个文件夹中的文件列表?请注意,包含资源的Jar文件与

  • //我得到的错误是java。尼奥。文件FileAlreadyExistsException所以据我所知,它试图将文件保存到确切的位置,而不是保存在文件中,如果我将目标地址改为“垃圾/垃圾”,我需要以这种方式保存几个文本文件。它将在那里保存一个名为垃圾的文件。txt。但在for-each的下一个循环中,它会抛出一个“已经存在”的异常。。。 有人能解释一下我如何从src文件夹将所有txt文件保存到该文

  • 我需要编写一条Apache Camel路由 null 我可以编写两条独立的路由:1)从Active-MQ获取消息;2)使用静态文件名读取文件夹中的文件并发送到JMS-Queue。但我的要求是只从这些文件中读取内容,对于这些文件,我从JMS队列中获取详细信息。这意味着从文件中读取内容是有选择的和基于条件的。 下面是我所需的示例Java DSL路由配置。 我知道在一条路由内使用两个“from”是不可能

  • 我正在尝试散集我的xml文件: 但我得到这个错误:java.io.FileNotFoundException:null(没有这样的文件或目录) 这是我的结构: 为什么我无法从资源文件夹中获取文件?谢谢。 更新。 重构后, URL url=this.getClass(). getResource("/xmlToParse/companies.xml"); File file=new File(url