> 引言：在网上经常会看到一个项目，分单体版、微服务版。

对于具体的开发来讲，管你是分布式？还是单体？都只是对一些接口的调用。当接口为纯本地实现时，则可为单体；当接口实现有分布式中间件调用时，则为分布式。

Solon Cloud （[点此处学习](/article/learn-solon-cloud)）是在 Solon 的基础上构建的微服务开发套件（微服务，即一组分布式开发的架构模式）。以标准与规范为核心，构建丰富的开放生态。为微服务开发提供了一个**通用防腐层**（即不用改代码，切换配置即可更换组件）。

它有很多的实现，其中就有纯本地的实现。比如：

* [local-solon-cloud-plugin](/article/354)，是实现 solon cloud 绝大数接口的纯本地实现方案（用于实现单体）
* water-solon-cloud-plugin，是实现 solon cloud 绝大数接口的分布式实现方案（用于实现分布式）


也可以自己实现，对接公司已有平台。


### 1、同时支持分布式或单体的设计


* 方案一：pom.xml 引入所有的包，通过环境参数动态切换。参考示例：

https://gitee.com/noear/solon-examples/tree/dev/9.Solon-Cloud/demo9901-cloud_or_single1

* 方案二：通过 maven 的 profile 定义多套配置，打包时选一个。参考示例：

https://gitee.com/noear/solon-examples/tree/dev/9.Solon-Cloud/demo9902-cloud_or_single2

### 2、方案二 pom.xml 关键内容预览

```xml
    <dependencies>
       <!-- 使用 solon cloud 接口开发各种能力 -->
        <dependency>
            <groupId>org.noear</groupId>
            <artifactId>solon.cloud</artifactId>
        </dependency>
    </dependencies>
    
    <profiles>
        <profile>
            <id>single</id>
            <dependencies>
                <!-- solon cloud 接口的本地实现（特性参考：https://solon.noear.org/article/354） -->
                <dependency>
                    <groupId>org.noear</groupId>
                    <artifactId>local-solon-cloud-plugin</artifactId>
                </dependency>
                <!-- 增加本地日志 -->
                <dependency>
                    <groupId>org.noear</groupId>
                    <artifactId>logback-solon-plugin</artifactId>
                </dependency>
            </dependencies>
            <properties>
                <project.env>single</project.env>
            </properties>
        </profile>
        <profile>
            <id>cloud</id>
            <dependencies>
                <!-- solon cloud 接口的分布式实现，或者引入别的 cloud 插件（特性参考：https://solon.noear.org/article/146） -->
                <!-- 它带了云端日志 -->
                <dependency>
                    <groupId>org.noear</groupId>
                    <artifactId>water-solon-cloud-plugin</artifactId>
                </dependency>
            </dependencies>
            <properties>
                <project.env>cloud</project.env>
            </properties>
        </profile>
    </profiles>

    <build>
        <finalName>${project.artifactId}</finalName>

        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
```

