2013-10-24 66 views
13

我们有一个与某些已删除的需求相关的软件包,但我们不希望删除代码,因为将来可能需要再次删除这些代码。所以在我们现有的ant版本中,我们已经排除了在我们的jar中编译的这个包。这些类不会编译,因为我们也删除了它们的依赖关系,所以它们不能包含在构建中。Gradle:如何从jar中排除特定的包?

我试图模仿摇篮该功能如下:

jar { 
    sourceSets.main.java.srcDirs = ['src', '../otherprojectdir/src'] 

    include (['com/ourcompany/somepackage/activityadapter/**', 
       ... 
     'com/ourcompany/someotherpackage/**']) 

    exclude(['com/ourcompany/someotherpackage/polling/**']) 
} 

即使上面的排除调用(和我已经试过了没有方括号为好),gradle产出仍试图编译polling类,这会导致编译失败。我如何防止Gradle尝试编译该软件包?

回答

24

如果你有一些你不想编译的源代码,你必须为源代码声明一个过滤器,而不是放在Jar中的类文件。喜欢的东西:

sourceSets { 
    main { 
     java { 
      include 'com/ourcompany/somepackage/activityadapter/**' 
      include 'com/ourcompany/someotherpackage/**' 
      exclude 'com/ourcompany/someotherpackage/polling/**' 
     } 
    } 
} 
+1

谢谢!知道我不是那里的目标:) – StormeHawke

+1

@Peter谢谢你的回答。问题是该类还在其他新版本的依赖中发现。我想使用较新的版本并排除旧版本的类。 – Achaius

22

该解决方案是有效的,如果你不想将编译这些包,但如果你想编译它们,并从你的JAR排除你可以使用

// tag::jar[] 
jar { 
    exclude('mi/package/excluded/**') 
    exclude('mi/package/excluded2/**') 
} 
// end::jar[] 
+0

无法在我的build.gradle文件中写入jar,您能否建议我在哪里编码,请提前致谢。 –

相关问题