diff --git a/README.md b/README.md index 6c89615..69ebff8 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@
- - + +
## SpringBlade微服务开发平台 diff --git a/blade-core-boot/pom.xml b/blade-core-boot/pom.xml index c884ad3..fe34379 100644 --- a/blade-core-boot/pom.xml +++ b/blade-core-boot/pom.xml @@ -5,7 +5,7 @@+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *
+ * http://www.gnu.org/licenses/lgpl.html + *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springblade.core.report.config;
+
+import com.bstek.ureport.UReportPropertyPlaceholderConfigurer;
+import com.bstek.ureport.console.UReportServlet;
+import com.bstek.ureport.provider.report.ReportProvider;
+import org.springblade.core.report.props.ReportDatabaseProperties;
+import org.springblade.core.report.props.ReportProperties;
+import org.springblade.core.report.provider.DatabaseProvider;
+import org.springblade.core.report.provider.ReportPlaceholderProvider;
+import org.springblade.core.report.service.IReportFileService;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.boot.web.servlet.ServletRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.ImportResource;
+import org.springframework.core.annotation.Order;
+
+import javax.servlet.Servlet;
+
+/**
+ * UReport配置类
+ *
+ * @author Chill
+ */
+@Order
+@Configuration
+@ConditionalOnProperty(value = "report.enabled", havingValue = "true", matchIfMissing = true)
+@EnableConfigurationProperties({ReportProperties.class, ReportDatabaseProperties.class})
+@ImportResource("classpath:ureport-console-context.xml")
+public class ReportConfiguration {
+
+ @Bean
+ public ServletRegistrationBean
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springblade.core.report.datasource;
+
+import com.bstek.ureport.definition.datasource.BuildinDatasource;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+/**
+ * UReport数据源配置
+ *
+ * @author Chill
+ */
+@Slf4j
+@AllArgsConstructor
+public class ReportDataSource implements BuildinDatasource {
+ private static final String NAME = "ReportDataSource";
+
+ private final DataSource dataSource;
+
+ @Override
+ public String name() {
+ return NAME;
+ }
+
+ @Override
+ public Connection getConnection() {
+ try {
+ return dataSource.getConnection();
+ } catch (SQLException e) {
+ log.error("report数据源链接失败");
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+}
diff --git a/blade-core-report/src/main/java/org/springblade/core/report/endpoint/ReportBootEndpoint.java b/blade-core-report/src/main/java/org/springblade/core/report/endpoint/ReportBootEndpoint.java
new file mode 100644
index 0000000..2879ee3
--- /dev/null
+++ b/blade-core-report/src/main/java/org/springblade/core/report/endpoint/ReportBootEndpoint.java
@@ -0,0 +1,38 @@
+/**
+ * Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com).
+ *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springblade.core.report.endpoint;
+
+import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.report.service.IReportFileService;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+/**
+ * UReport Boot版 API端点
+ *
+ * @author Chill
+ */
+@ApiIgnore
+@RestController
+@RequestMapping(AppConstant.APPLICATION_REPORT_NAME + "/report/rest")
+public class ReportBootEndpoint extends ReportEndpoint {
+
+ public ReportBootEndpoint(IReportFileService service) {
+ super(service);
+ }
+
+}
diff --git a/blade-core-report/src/main/java/org/springblade/core/report/endpoint/ReportEndpoint.java b/blade-core-report/src/main/java/org/springblade/core/report/endpoint/ReportEndpoint.java
new file mode 100644
index 0000000..0ea59aa
--- /dev/null
+++ b/blade-core-report/src/main/java/org/springblade/core/report/endpoint/ReportEndpoint.java
@@ -0,0 +1,71 @@
+/**
+ * Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com).
+ *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springblade.core.report.endpoint;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.report.entity.ReportFileEntity;
+import org.springblade.core.report.service.IReportFileService;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.util.Map;
+
+/**
+ * UReport API端点
+ *
+ * @author Chill
+ */
+@ApiIgnore
+@RestController
+@AllArgsConstructor
+@RequestMapping("/report/rest")
+public class ReportEndpoint {
+
+ private final IReportFileService service;
+
+ /**
+ * 详情
+ */
+ @GetMapping("/detail")
+ public R
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springblade.core.report.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * UReport实体类
+ *
+ * @author Chill
+ */
+@Data
+@TableName("blade_report_file")
+public class ReportFileEntity implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "id", type = IdType.ASSIGN_ID)
+ private Long id;
+ /**
+ * 文件名
+ */
+ private String name;
+ /**
+ * 文件内容
+ */
+ private byte[] content;
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+ /**
+ * 更新时间
+ */
+ private Date updateTime;
+ /**
+ * 是否已删除
+ */
+ @TableLogic
+ private Integer isDeleted;
+
+}
diff --git a/blade-core-report/src/main/java/org/springblade/core/report/mapper/ReportFileMapper.java b/blade-core-report/src/main/java/org/springblade/core/report/mapper/ReportFileMapper.java
new file mode 100644
index 0000000..719afc4
--- /dev/null
+++ b/blade-core-report/src/main/java/org/springblade/core/report/mapper/ReportFileMapper.java
@@ -0,0 +1,27 @@
+/**
+ * Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com).
+ *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springblade.core.report.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.core.report.entity.ReportFileEntity;
+
+/**
+ * UReport Mapper
+ *
+ * @author Chill
+ */
+public interface ReportFileMapper extends BaseMapper
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springblade.core.report.props;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * UReport配置类
+ *
+ * @author Chill
+ */
+@Data
+@ConfigurationProperties(prefix = "report.database.provider")
+public class ReportDatabaseProperties {
+ private String name = "数据库文件系统";
+ private String prefix = "blade-";
+ private boolean disabled = false;
+}
diff --git a/blade-core-report/src/main/java/org/springblade/core/report/props/ReportProperties.java b/blade-core-report/src/main/java/org/springblade/core/report/props/ReportProperties.java
new file mode 100644
index 0000000..823c981
--- /dev/null
+++ b/blade-core-report/src/main/java/org/springblade/core/report/props/ReportProperties.java
@@ -0,0 +1,35 @@
+/**
+ * Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com).
+ *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springblade.core.report.props;
+
+import lombok.Data;
+import org.springblade.core.tool.utils.StringPool;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * UReport配置类
+ *
+ * @author Chill
+ */
+@Data
+@ConfigurationProperties(prefix = "report")
+public class ReportProperties {
+ private Boolean enabled = true;
+ private Boolean disableHttpSessionReportCache = false;
+ private Boolean disableFileProvider = true;
+ private String fileStoreDir = StringPool.EMPTY;
+ private Boolean debug = false;
+}
diff --git a/blade-core-report/src/main/java/org/springblade/core/report/provider/DatabaseProvider.java b/blade-core-report/src/main/java/org/springblade/core/report/provider/DatabaseProvider.java
new file mode 100644
index 0000000..114918f
--- /dev/null
+++ b/blade-core-report/src/main/java/org/springblade/core/report/provider/DatabaseProvider.java
@@ -0,0 +1,110 @@
+/**
+ * Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com).
+ *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springblade.core.report.provider;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.bstek.ureport.provider.report.ReportFile;
+import com.bstek.ureport.provider.report.ReportProvider;
+import lombok.AllArgsConstructor;
+import org.springblade.core.report.entity.ReportFileEntity;
+import org.springblade.core.report.props.ReportDatabaseProperties;
+import org.springblade.core.report.service.IReportFileService;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.utils.DateUtil;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 数据库文件处理
+ *
+ * @author Chill
+ */
+@AllArgsConstructor
+public class DatabaseProvider implements ReportProvider {
+
+ private final ReportDatabaseProperties properties;
+ private final IReportFileService service;
+
+ @Override
+ public InputStream loadReport(String file) {
+ ReportFileEntity reportFileEntity = service.getOne(Wrappers.
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springblade.core.report.provider;
+
+import com.bstek.ureport.UReportPropertyPlaceholderConfigurer;
+import org.springblade.core.report.props.ReportProperties;
+
+import java.util.Properties;
+
+/**
+ * UReport自定义配置
+ *
+ * @author Chill
+ */
+public class ReportPlaceholderProvider extends UReportPropertyPlaceholderConfigurer {
+
+ public ReportPlaceholderProvider(ReportProperties properties) {
+ Properties props = new Properties();
+ props.setProperty("ureport.disableHttpSessionReportCache", properties.getDisableHttpSessionReportCache().toString());
+ props.setProperty("ureport.disableFileProvider", properties.getDisableFileProvider().toString());
+ props.setProperty("ureport.fileStoreDir", properties.getFileStoreDir());
+ props.setProperty("ureport.debug", properties.getDebug().toString());
+ this.setProperties(props);
+ }
+
+}
diff --git a/blade-core-report/src/main/java/org/springblade/core/report/service/IReportFileService.java b/blade-core-report/src/main/java/org/springblade/core/report/service/IReportFileService.java
new file mode 100644
index 0000000..9cf5b13
--- /dev/null
+++ b/blade-core-report/src/main/java/org/springblade/core/report/service/IReportFileService.java
@@ -0,0 +1,27 @@
+/**
+ * Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com).
+ *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springblade.core.report.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.core.report.entity.ReportFileEntity;
+
+/**
+ * UReport Service
+ *
+ * @author Chill
+ */
+public interface IReportFileService extends IService
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springblade.core.report.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.core.report.entity.ReportFileEntity;
+import org.springblade.core.report.mapper.ReportFileMapper;
+import org.springblade.core.report.service.IReportFileService;
+import org.springframework.stereotype.Service;
+
+/**
+ * UReport Service
+ *
+ * @author Chill
+ */
+@Service
+public class ReportFileServiceImpl extends ServiceImpl
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springblade.core.swagger;
+
+import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
+
+import java.lang.annotation.*;
+
+/**
+ * Swagger配置开关
+ *
+ * @author Chill
+ */
+@Documented
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@EnableSwagger2WebMvc
+public @interface EnableSwagger {
+}
diff --git a/blade-core-swagger/src/main/java/org/springblade/core/swagger/SwaggerAutoConfiguration.java b/blade-core-swagger/src/main/java/org/springblade/core/swagger/SwaggerAutoConfiguration.java
index 56fc7ce..34dcf05 100644
--- a/blade-core-swagger/src/main/java/org/springblade/core/swagger/SwaggerAutoConfiguration.java
+++ b/blade-core-swagger/src/main/java/org/springblade/core/swagger/SwaggerAutoConfiguration.java
@@ -16,25 +16,23 @@
package org.springblade.core.swagger;
-import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
+import com.google.common.collect.Lists;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
-import org.springframework.context.annotation.Profile;
import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
+import springfox.documentation.spring.web.plugins.ApiSelectorBuilder;
import springfox.documentation.spring.web.plugins.Docket;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -44,15 +42,14 @@ import java.util.List;
* @author Chill
*/
@Configuration
-@EnableKnife4j
-@EnableSwagger2
-@Profile({"dev", "test"})
+@EnableSwagger
@EnableConfigurationProperties(SwaggerProperties.class)
@Import(BeanValidatorPluginsConfiguration.class)
public class SwaggerAutoConfiguration {
- private static final String DEFAULT_EXCLUDE_PATH = "/error";
- private static final String BASE_PATH = "/**";
+ private static final String DEFAULT_MAPPING_PATH = "/";
+ private static final String DEFAULT_BASE_PATH = "/**";
+ private static final List
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springblade.core.swagger;
+
+import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.launch.service.LauncherService;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.core.Ordered;
+
+import java.util.Properties;
+
+/**
+ * 初始化Swagger配置
+ *
+ * @author Chill
+ */
+public class SwaggerLauncherServiceImpl implements LauncherService {
+ @Override
+ public void launcher(SpringApplicationBuilder builder, String appName, String profile) {
+ Properties props = System.getProperties();
+ if (profile.equals(AppConstant.PROD_CODE)) {
+ props.setProperty("knife4j.production", "true");
+ }
+ }
+
+ @Override
+ public int getOrder() {
+ return Ordered.LOWEST_PRECEDENCE;
+ }
+}
diff --git a/blade-core-swagger/src/main/java/org/springblade/core/swagger/SwaggerProperties.java b/blade-core-swagger/src/main/java/org/springblade/core/swagger/SwaggerProperties.java
index 1525640..b53eeb1 100644
--- a/blade-core-swagger/src/main/java/org/springblade/core/swagger/SwaggerProperties.java
+++ b/blade-core-swagger/src/main/java/org/springblade/core/swagger/SwaggerProperties.java
@@ -55,7 +55,7 @@ public class SwaggerProperties {
/**
* 版本
**/
- private String version = "2.7.3";
+ private String version = "2.8.0";
/**
* 许可证
**/
diff --git a/blade-core-swagger/src/main/java/org/springblade/core/swagger/SwaggerUtil.java b/blade-core-swagger/src/main/java/org/springblade/core/swagger/SwaggerUtil.java
index ac32be3..a6a0aae 100644
--- a/blade-core-swagger/src/main/java/org/springblade/core/swagger/SwaggerUtil.java
+++ b/blade-core-swagger/src/main/java/org/springblade/core/swagger/SwaggerUtil.java
@@ -17,10 +17,10 @@ package org.springblade.core.swagger;
import com.google.common.base.Function;
import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
import springfox.documentation.RequestHandler;
import java.util.List;
+import java.util.function.Predicate;
/**
* Swagger工具类
diff --git a/blade-core-swagger/src/main/resources/META-INF/services/org.springblade.core.launch.service.LauncherService b/blade-core-swagger/src/main/resources/META-INF/services/org.springblade.core.launch.service.LauncherService
new file mode 100644
index 0000000..03ce0b3
--- /dev/null
+++ b/blade-core-swagger/src/main/resources/META-INF/services/org.springblade.core.launch.service.LauncherService
@@ -0,0 +1 @@
+org.springblade.core.swagger.SwaggerLauncherServiceImpl
diff --git a/blade-core-test/pom.xml b/blade-core-test/pom.xml
index d0ef651..3c4b8ca 100644
--- a/blade-core-test/pom.xml
+++ b/blade-core-test/pom.xml
@@ -5,7 +5,7 @@