使用嵌入式容器

我会说这个提示是最重要的。这是您开始仅在一个jar中创建整个应用程序的地方。没有servlet或应用程序容器。无需设置环境。只是JRE和你的罐子,永远幸福。
在创建第一个应用程序之前,我从没想过要有一个可启动的应用程序。这听起来很神奇:如果你想在本地运行,不需要坚持使用Eclipse在容器内运行你的应用程序,不需要用servlet容器设置服务器,你只需要运行一个jar,哇!它就是!该应用正在运行!
当我记得我编写WAR应用程序的时候,我想:我对自己做了什么?真是太痛苦了!那个挺难!并非所有IDE都支持容器插件,因此,远程调试是调试我的应用程序的唯一解决方案,当然,使用容器意味着您必须意识到您需要在开发中使用相同的容器版本。生产,否则你很可能会把交货搞定。

至少使用Java 8

我想每个人都同意:Java很冗长。
太冗长了。
和。这个。真。吮吸。
不要误会我的意思,即使Java 8太冗长了。但是,Java 8有一些不错的东西:Lambdas。这使得Java 8成为另一个好东西:Java 8 Stream API。

我的意思是,我想你不能这样说:( ...)

public List<String> getAdminEmails() {
    List<User> users = getUsers();
    List<String> emails = new ArrayList<>();

    for (User u: users) {
        if (!u.isActive()){
           continue;
        }

        if (!u.hasEmail()){
           continue;
        }

        if (!u.isAdmin()){
           continue;
        }

        emails.add(u.getEmail());
    }

    return emails;
 }

(...) 转向: (...)

public List<String> getAdminEmails() {
    return getUsers()
      .stream()
      .filter(User::hasEmail)
      .filter(User::isActive)
      .filter(User::isAdmin)
      .map(User::getEmail)
      .collect(Collectors.toList());
}

(...)不是一个很大的改进,对吗?

比Java 7代码少11行,也没有任何可变性。

当然,如果你不相信,这只是一个例子。还有其他一些例子。在Java 8之后,反应式编程的整个想法变得更加明显。如果你认为回调可能变得混乱,想象一下基于匿名内部类的回调。Lambdas让事情变得更容易,我想这里的每个人都同意这一点。

使用Gradle 4

好吧,我不喜欢Gradle。实际上,我不喜欢任何构建工具。他们每个人都在某些方面很糟糕。例如,Gradle没有像SBT那样的REPL,但是,Gradle要快得多,所以,1x1。
无论如何,如果你使用的是Java,你最终可能会使用Maven或Gradle,但我的建议是:使用Gradle。而不是任何版本,尝试使用最后一个。Gradle 4比旧版快得多,而且你会发现任何你想要的插件。

考虑使用另一种JVM语言来创建测试

Java在DSL上很糟糕,因为Java不是为DSL创建而设计的,就像那样简单。知道,你可以利用一件小事:Java在JVM上运行,猜猜是什么?许多其他语言也非常“DSL欢迎”。
你听说过ScalaTest吗?KotlinTest?斯波克?在编写测试时,请考虑使用其中一个。

远离企业世界

容器,EAR,远程EJB等等。这样的东西会让你陷入企业世界。
所有这些都将使您的Java应用程序更加官僚,更重,更难以测试,部署,与其他应用程序集成,因此,您需要放手。无论如何,你可能不需要任何这些东西。

始终自动部署您的部署

实际上,这个建议对任何语言都很有用。始终自动部署您的部署。有一些工具可以帮助你做到这一点,因此,如果你正在开发一个应用程序,任何应用程序,你可以自动化任何东西。

越轻越好

以下是我之前说过的所有内容。如果你离开企业世界,使用最新的Java版本,创建可启动的应用程序而不是可部署的应用程序,你可能会注意到:更好,更好。
我们可以更进一步:如果您创建微服务,那么创建和维护您的应用程序将变得相当容易。当然,如果你有许多微服务,你需要一定的治理,但是,它会得到回报。
有大量的API和框架可以帮助您,例如:Spring Boot,SparkJava,Apollo,Light-4j等。它们中的任何一个都为您提供了创建这些应用程序的几个功能。

即将完成...

没有什么魔力,如果我们谈论语言特征,Java仍然落后于大多数其他语言。但是,正如您所看到的,如果您了解JVM世界中存在的内容,您可以让您的生活更轻松。=)