在Ascii-Doc Maven插件中,可以使用include
指令来包含外部资源,但默认情况下仅支持使用file
或http
协议来引用资源。若要通过https协议引用资源,可以使用Apache HTTPComponents库的HttpClient组件。
org.apache.httpcomponents
httpclient
4.5.12
org.apache.httpcomponents
httpcore
4.4.13
org.asciidoctor.extension.IncludeResolver
类,覆盖resolve
方法:import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.asciidoctor.ast.DocumentRuby;
import org.asciidoctor.extension.IncludeResolver;
import org.asciidoctor.extension.IncludeResolveResult;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class AsciiDocHttpsIncludeResolver extends IncludeResolver {
@Override
public IncludeResolveResult resolve(String target, DocumentRuby document) {
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
HttpGet httpGet = new HttpGet(target);
CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
InputStream inputStream = httpResponse.getEntity().getContent();
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[1024];
while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
buffer.write(data, 0, nRead);
}
buffer.flush();
byte[] byteArray = buffer.toByteArray();
return new IncludeResolveResult(new ByteArrayInputStream(byteArray));
} catch