无法创建 AsynchronousJiraRestClientFactory(依赖性问题)
Cannot create AsynchronousJiraRestClientFactory (Dependency Issue)
我之前在 Java 中创建了一个 restful 客户端应用程序来大量处理工单并加快工作流程,但是,我想创建一个更全面的应用程序来利用实际的 JIRA api 而不是在我自己的解决方案中解析 JSON 。
我有一个非常简单的代码块来创建客户端:
public class SimpleMain {
public static void main(String[] args) {
try {
JiraRestClient client = new AsynchronousJiraRestClientFactory()
.createWithBasicHttpAuthentication(new URI("https://jira.redacted.com"), "redacted", "redacted");
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
}
尝试创建一个简单的 AsynchronousJiraRestClientFactory 会导致以下异常:
15:12:06.625 [main] DEBUG c.a.j.r.c.i.a.AsynchronousHttpClientFactory$MavenUtils - Could not find version for maven artifact com.atlassian.jira:jira-rest-java-com.atlassian.jira.rest.client
15:12:06.633 [main] DEBUG c.a.j.r.c.i.a.AsynchronousHttpClientFactory$MavenUtils - Got the following exception
java.lang.NullPointerException: null
at java.util.Properties$LineReader.readLine(Properties.java:434) ~[na:1.8.0_51]
at java.util.Properties.load0(Properties.java:353) ~[na:1.8.0_51]
at java.util.Properties.load(Properties.java:341) ~[na:1.8.0_51]
at com.atlassian.jira.rest.client.internal.async.AsynchronousHttpClientFactory$MavenUtils.getVersion(AsynchronousHttpClientFactory.java:158) ~[jira-rest-java-client-core-3.0.0.jar:na]
at com.atlassian.jira.rest.client.internal.async.AsynchronousHttpClientFactory$RestClientApplicationProperties.getVersion(AsynchronousHttpClientFactory.java:121) [jira-rest-java-client-core-3.0.0.jar:na]
at com.atlassian.httpclient.apache.httpcomponents.DefaultHttpClient.getUserAgent(DefaultHttpClient.java:168) [atlassian-httpclient-apache-httpcomponents-0.13.2.jar:na]
at com.atlassian.httpclient.apache.httpcomponents.DefaultHttpClient.<init>(DefaultHttpClient.java:139) [atlassian-httpclient-apache-httpcomponents-0.13.2.jar:na]
at com.atlassian.jira.rest.client.internal.async.AsynchronousHttpClientFactory.createClient(AsynchronousHttpClientFactory.java:53) [jira-rest-java-client-core-3.0.0.jar:na]
at com.atlassian.jira.rest.client.internal.async.AsynchronousJiraRestClientFactory.create(AsynchronousJiraRestClientFactory.java:35) [jira-rest-java-client-core-3.0.0.jar:na]
at com.atlassian.jira.rest.client.internal.async.AsynchronousJiraRestClientFactory.createWithBasicHttpAuthentication(AsynchronousJiraRestClientFactory.java:42) [jira-rest-java-client-core-3.0.0.jar:na]
at jiratest.SimpleMain.main(SimpleMain.java:13) [classes/:na]
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.http.nio.client.HttpAsyncClient.start()V
at com.atlassian.httpclient.apache.httpcomponents.DefaultHttpClient.<init>(DefaultHttpClient.java:162)
Disconnected from the target VM, address: '127.0.0.1:53429', transport: 'socket'
at com.atlassian.jira.rest.client.internal.async.AsynchronousHttpClientFactory.createClient(AsynchronousHttpClientFactory.java:53)
at com.atlassian.jira.rest.client.internal.async.AsynchronousJiraRestClientFactory.create(AsynchronousJiraRestClientFactory.java:35)
at com.atlassian.jira.rest.client.internal.async.AsynchronousJiraRestClientFactory.createWithBasicHttpAuthentication(AsynchronousJiraRestClientFactory.java:42)
at jiratest.SimpleMain.main(SimpleMain.java:13)
根据我的阅读,这是一个依赖性问题,因为库不同。这是我正在使用的:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<pojomatic.version>2.0.1</pojomatic.version>
<jira-api.version>6.1.1</jira-api.version>
<jira-rest-java-client-core.version>3.0.0</jira-rest-java-client-core.version>
<httpcore.version>4.4.1</httpcore.version>
<commons-io.version>2.4</commons-io.version>
</properties>
<dependencies>
<dependency>
<groupId>com.atlassian.jira</groupId>
<artifactId>jira-api</artifactId>
<version>${jira-api.version}</version>
</dependency>
<dependency>
<groupId>com.atlassian.jira</groupId>
<artifactId>jira-rest-java-client-core</artifactId>
<version>${jira-rest-java-client-core.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpcore.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>${httpcore.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore-nio</artifactId>
<version>${httpcore.version}</version>
</dependency>
<dependency>
<groupId>org.pojomatic</groupId>
<artifactId>pojomatic</artifactId>
<version>${pojomatic.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
有人知道我应该使用什么版本吗?我还缺少依赖项吗?我一直在阅读 atlasian q/a 和各种 google 文档,我想我已经接近了,但我不确定我还缺少什么。
提前感谢大家:)
实际问题在于 Spring 的传递依赖项覆盖了 atlassian 的传递依赖项。解决这个问题的方法是将依赖项重新整理成 jrjc 需要它们的样子,而不是更新的版本。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.2.1-atlassian-2</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpasyncclient</artifactId>
<version>4.0-beta3-atlassian-1</version>
</dependency>
</dependencies>
</dependencyManagement>
注意:这些版本可能会在未来的版本中发生变化,但它们适用于 JRJC 核心版本 3.0.0。你可以通过阅读 mvn dependency:tree
的输出来找出,它会说类似:httpasyncclient:jar:4.0.2:compile - version managed from 4.0-beta3-atlassian-1
这让你知道 maven 使用的是 httpsyncclient
的 4.0.2 版本,所以你需要重写它回到 4.0-beta3-atlassian-1
.
我也遇到了同样的问题,解决方法如下:
我都有
<dependency>
<groupId>com.atlassian.jira</groupId>
<artifactId>jira-rest-java-client-core</artifactId>
<version>2.0.0-m25</version>
</dependency>
和
<dependency>
<groupId>com.atlassian.httpclient</groupId>
<artifactId>atlassian-httpclient-apache-httpcomponents</artifactId>
<version>0.13.2</version>
</dependency>
在我的 pom.xml 文件中。原来 client-core 里面已经有 httpcomponents,他们发生了冲突。删除第二个依赖项解决了问题
在尝试了互联网上的所有其他解决方案后,修改我的 log4j2 配置对我有用:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%msg%n" />
</Console>
<File name="File" fileName="qed.log" immediateFlush="true" append="true">
<PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Logger name="com.atlassian.jira.rest.client.internal.async.AsynchronousHttpClientFactory$MavenUtils" level="OFF"/>
<Root level="DEBUG">
<AppenderRef ref="Console" />
<AppenderRef ref="File"/>
</Root>
</Loggers>
配置的关键部分是:
<Logger name="com.atlassian.jira.rest.client.internal.async.AsynchronousHttpClientFactory$MavenUtils" level="OFF"/>
显然它没有解决问题,但确实隐藏了它。
尽管 NullPointerException 看起来很讨厌,但它对 ApacheAsyncHttpClient 的创建没有影响,请参阅:
try {
resourceAsStream = MavenUtils.class.getResourceAsStream(String
.format("/META-INF/maven/%s/%s/pom.properties", groupId, artifactId));
props.load(resourceAsStream);
return props.getProperty("version", UNKNOWN_VERSION);
} catch (Exception e) {
logger.debug("Could not find version for maven artifact {}:{}", groupId, artifactId);
logger.debug("Got the following exception", e);
return UNKNOWN_VERSION;
} finally {
我之前在 Java 中创建了一个 restful 客户端应用程序来大量处理工单并加快工作流程,但是,我想创建一个更全面的应用程序来利用实际的 JIRA api 而不是在我自己的解决方案中解析 JSON 。 我有一个非常简单的代码块来创建客户端:
public class SimpleMain {
public static void main(String[] args) {
try {
JiraRestClient client = new AsynchronousJiraRestClientFactory()
.createWithBasicHttpAuthentication(new URI("https://jira.redacted.com"), "redacted", "redacted");
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
}
尝试创建一个简单的 AsynchronousJiraRestClientFactory 会导致以下异常:
15:12:06.625 [main] DEBUG c.a.j.r.c.i.a.AsynchronousHttpClientFactory$MavenUtils - Could not find version for maven artifact com.atlassian.jira:jira-rest-java-com.atlassian.jira.rest.client
15:12:06.633 [main] DEBUG c.a.j.r.c.i.a.AsynchronousHttpClientFactory$MavenUtils - Got the following exception
java.lang.NullPointerException: null
at java.util.Properties$LineReader.readLine(Properties.java:434) ~[na:1.8.0_51]
at java.util.Properties.load0(Properties.java:353) ~[na:1.8.0_51]
at java.util.Properties.load(Properties.java:341) ~[na:1.8.0_51]
at com.atlassian.jira.rest.client.internal.async.AsynchronousHttpClientFactory$MavenUtils.getVersion(AsynchronousHttpClientFactory.java:158) ~[jira-rest-java-client-core-3.0.0.jar:na]
at com.atlassian.jira.rest.client.internal.async.AsynchronousHttpClientFactory$RestClientApplicationProperties.getVersion(AsynchronousHttpClientFactory.java:121) [jira-rest-java-client-core-3.0.0.jar:na]
at com.atlassian.httpclient.apache.httpcomponents.DefaultHttpClient.getUserAgent(DefaultHttpClient.java:168) [atlassian-httpclient-apache-httpcomponents-0.13.2.jar:na]
at com.atlassian.httpclient.apache.httpcomponents.DefaultHttpClient.<init>(DefaultHttpClient.java:139) [atlassian-httpclient-apache-httpcomponents-0.13.2.jar:na]
at com.atlassian.jira.rest.client.internal.async.AsynchronousHttpClientFactory.createClient(AsynchronousHttpClientFactory.java:53) [jira-rest-java-client-core-3.0.0.jar:na]
at com.atlassian.jira.rest.client.internal.async.AsynchronousJiraRestClientFactory.create(AsynchronousJiraRestClientFactory.java:35) [jira-rest-java-client-core-3.0.0.jar:na]
at com.atlassian.jira.rest.client.internal.async.AsynchronousJiraRestClientFactory.createWithBasicHttpAuthentication(AsynchronousJiraRestClientFactory.java:42) [jira-rest-java-client-core-3.0.0.jar:na]
at jiratest.SimpleMain.main(SimpleMain.java:13) [classes/:na]
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.http.nio.client.HttpAsyncClient.start()V
at com.atlassian.httpclient.apache.httpcomponents.DefaultHttpClient.<init>(DefaultHttpClient.java:162)
Disconnected from the target VM, address: '127.0.0.1:53429', transport: 'socket'
at com.atlassian.jira.rest.client.internal.async.AsynchronousHttpClientFactory.createClient(AsynchronousHttpClientFactory.java:53)
at com.atlassian.jira.rest.client.internal.async.AsynchronousJiraRestClientFactory.create(AsynchronousJiraRestClientFactory.java:35)
at com.atlassian.jira.rest.client.internal.async.AsynchronousJiraRestClientFactory.createWithBasicHttpAuthentication(AsynchronousJiraRestClientFactory.java:42)
at jiratest.SimpleMain.main(SimpleMain.java:13)
根据我的阅读,这是一个依赖性问题,因为库不同。这是我正在使用的:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<pojomatic.version>2.0.1</pojomatic.version>
<jira-api.version>6.1.1</jira-api.version>
<jira-rest-java-client-core.version>3.0.0</jira-rest-java-client-core.version>
<httpcore.version>4.4.1</httpcore.version>
<commons-io.version>2.4</commons-io.version>
</properties>
<dependencies>
<dependency>
<groupId>com.atlassian.jira</groupId>
<artifactId>jira-api</artifactId>
<version>${jira-api.version}</version>
</dependency>
<dependency>
<groupId>com.atlassian.jira</groupId>
<artifactId>jira-rest-java-client-core</artifactId>
<version>${jira-rest-java-client-core.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpcore.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>${httpcore.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore-nio</artifactId>
<version>${httpcore.version}</version>
</dependency>
<dependency>
<groupId>org.pojomatic</groupId>
<artifactId>pojomatic</artifactId>
<version>${pojomatic.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
有人知道我应该使用什么版本吗?我还缺少依赖项吗?我一直在阅读 atlasian q/a 和各种 google 文档,我想我已经接近了,但我不确定我还缺少什么。
提前感谢大家:)
实际问题在于 Spring 的传递依赖项覆盖了 atlassian 的传递依赖项。解决这个问题的方法是将依赖项重新整理成 jrjc 需要它们的样子,而不是更新的版本。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.2.1-atlassian-2</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpasyncclient</artifactId>
<version>4.0-beta3-atlassian-1</version>
</dependency>
</dependencies>
</dependencyManagement>
注意:这些版本可能会在未来的版本中发生变化,但它们适用于 JRJC 核心版本 3.0.0。你可以通过阅读 mvn dependency:tree
的输出来找出,它会说类似:httpasyncclient:jar:4.0.2:compile - version managed from 4.0-beta3-atlassian-1
这让你知道 maven 使用的是 httpsyncclient
的 4.0.2 版本,所以你需要重写它回到 4.0-beta3-atlassian-1
.
我也遇到了同样的问题,解决方法如下: 我都有
<dependency>
<groupId>com.atlassian.jira</groupId>
<artifactId>jira-rest-java-client-core</artifactId>
<version>2.0.0-m25</version>
</dependency>
和
<dependency>
<groupId>com.atlassian.httpclient</groupId>
<artifactId>atlassian-httpclient-apache-httpcomponents</artifactId>
<version>0.13.2</version>
</dependency>
在我的 pom.xml 文件中。原来 client-core 里面已经有 httpcomponents,他们发生了冲突。删除第二个依赖项解决了问题
在尝试了互联网上的所有其他解决方案后,修改我的 log4j2 配置对我有用:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%msg%n" />
</Console>
<File name="File" fileName="qed.log" immediateFlush="true" append="true">
<PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Logger name="com.atlassian.jira.rest.client.internal.async.AsynchronousHttpClientFactory$MavenUtils" level="OFF"/>
<Root level="DEBUG">
<AppenderRef ref="Console" />
<AppenderRef ref="File"/>
</Root>
</Loggers>
配置的关键部分是:
<Logger name="com.atlassian.jira.rest.client.internal.async.AsynchronousHttpClientFactory$MavenUtils" level="OFF"/>
显然它没有解决问题,但确实隐藏了它。
尽管 NullPointerException 看起来很讨厌,但它对 ApacheAsyncHttpClient 的创建没有影响,请参阅:
try {
resourceAsStream = MavenUtils.class.getResourceAsStream(String
.format("/META-INF/maven/%s/%s/pom.properties", groupId, artifactId));
props.load(resourceAsStream);
return props.getProperty("version", UNKNOWN_VERSION);
} catch (Exception e) {
logger.debug("Could not find version for maven artifact {}:{}", groupId, artifactId);
logger.debug("Got the following exception", e);
return UNKNOWN_VERSION;
} finally {