【问题标题】:How to avoid packaging useless classes如何避免打包无用的类
【发布时间】:2017-06-04 01:24:55
【问题描述】:

我正在开发 Intellij plugin,这是我第一次尝试使用 Java 语言构建“真实项目”。在这个插件上,我创建了很多类(和枚举),在重构代码之后,我最终到达了我创建的一些类不再使用的地步(除了单元测试,即最终包装上没有打包在一起)。

我的问题是:如果一个类不再需要在包中,有什么方法可以在不将其从项目中删除的情况下不被包? (曾经我可以,将来,再次需要这门课。


实例:

通过UserDataHolderUtil enum在项目上的使用来查找:

.jar 内容:

您可以注意到,这个枚举目前仅用于单元测试,但它被打包到最终包中并且从未使用过。

【问题讨论】:

  • 通常人们有一个完整的包只用于单元测试,没有打包在最终的应用程序中:)
  • 在 Intellij 上将目录/tests 标记为“测试源”,然后在最终的 .jar 中不打包,但未使用的类仍然存在。
  • 一些 maven-plugin 可能会做你想做的事。你使用 maven 进行构建吗?摇篮?常春藤?蚂蚁?
  • 考虑不同的方法。使用源代码控制有一个正在进行的分支来容纳不再需要的类(现在)。从主干中删除死代码以保持项目精简和干净。
  • @JeremyGrand 目前我用的是自己的Intellij打包过程,真的不知道有没有用到这个工具。

标签: java optimization intellij-idea package


【解决方案1】:

通常的方法是将您的类型和资源组织在不同的源文件夹中。这些可以在 intellij 的模块设置中进行配置。它通常分为“源”、“测试源”、“资源”和“测试资源”。

文件系统上的通用组织通常是(我认为这是一个“事实上的”标准,至少 maven 是这样做的)

  • src/main/java
  • src/main/resources
  • src/test/java
  • src/test/resources

然后应该对构建工具进行相应的配置,以打包一个 production-jar 和一个 test-jar(然后使用 production-jar 作为依赖项来运行其测试)。

希望这会有所帮助,...

【讨论】:

  • 我已经在这样做了,只是做了一些小的改动,但我指定了每个目录类型,甚至它还在继续发生。
  • 实际上,它在 Maven 之外的任何地方都不是标准。我并不是说它会变坏,只是它只是 Maven 的习惯结构。不管实际使用的目录结构如何,将源代码和测试文件分离到不同的子目录中是个好主意。
  • @VGR:为了完整性:这也是 gradle 标准布局,我刚刚发现(我在一个“gradle 项目”中工作,我想知道为什么我们使用相同的结构为 mvn)。
【解决方案2】:

我会在 IntelliJ IDEA 的同一个项目下创建一个新模块,并将所有未使用的类型移动到新模块中。

这样,类型的包层次结构被保留,类型保留在同一个项目中,这意味着它们包含在您可能进行的任何重构中。

你让“未使用”的模块依赖于项目的主模块,但当然没有其他模块依赖它,所以你不必将它包含在最终的包中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多