org.eclipse.persistence.moxy;2.3.2:解析 jersey-bundle 1.19.1 时未找到
org.eclipse.persistence.moxy;2.3.2: not found when resolving jersey-bundle 1.19.1
我在尝试将 ivy:install
模块 jersey-bundle 1.19.1
放入本地(基于文件系统的)Ivy 解析器时遇到异常。我设法使用下面更短的代码重现了这一点。
失败案例
我在下面的 ivysettings.xml
中定义了两个解析器。一个是 public ibiblio
解析器,另一个是本地(基于文件系统的解析器),我想将模块(及其依赖项)从 ibiblio
复制到其中:
<ivysettings>
<settings defaultResolver="public" />
<resolvers>
<ibiblio name="public" m2compatible="true" />
<filesystem name="fs-local">
<ivy
pattern="/tmp/local-ivy-repo/[organisation]/[module]/ivys/ivy-[revision].xml"/>
<artifact
pattern="/tmp/local-ivy-repo/[organisation]/[module]/[type]s/[artifact]-[revision].[ext]"/>
</filesystem>
</resolvers>
</ivysettings>
使用上面的 ivysettings.xml
文件,然后我有以下 Ant 文件 ivy:install
我感兴趣的模块:
<project name="local repository importation" default="install-locally">
<target name="install-locally" description="import module from public Maven repository and install into local filesystem repository" xmlns:ivy="antlib:org.apache.ivy.ant">
<ivy:settings id="ivysettings-ibiblio-to-local" file="ivysettings.xml"/>
<ivy:install settingsRef="ivysettings-ibiblio-to-local"
organisation="com.sun.jersey"
module="jersey-bundle"
revision="1.19.1"
from="public"
to="fs-local"
transitive="true"
overwrite="true"/>
</target>
</project>
当我执行(使用Ant
)上述文件时,我最终得到以下信息:
:: problems summary ::
:::: WARNINGS
module not found: org.eclipse.persistence#org.eclipse.persistence.moxy;2.3.2
==== public: tried
https://repo1.maven.org/maven2/org/eclipse/persistence/org.eclipse.persistence.moxy/2.3.2/org.eclipse.persistence.moxy-2.3.2.pom
-- artifact org.eclipse.persistence#org.eclipse.persistence.moxy;2.3.2!org.eclipse.persistence.moxy.jar:
https://repo1.maven.org/maven2/org/eclipse/persistence/org.eclipse.persistence.moxy/2.3.2/org.eclipse.persistence.moxy-2.3.2.jar
::::::::::::::::::::::::::::::::::::::::::::::
:: UNRESOLVED DEPENDENCIES ::
::::::::::::::::::::::::::::::::::::::::::::::
:: org.eclipse.persistence#org.eclipse.persistence.moxy;2.3.2: not found
::::::::::::::::::::::::::::::::::::::::::::::
这显然是警告而不是错误(不确定在这种情况下的区别有多重要)。查看 /tmp/local-ivy-repo/
目录,我看到许多模块和 jar(包括 jersey-bundle
)。
成功案例
另一方面,如果我尝试从 public 存储库中拉下 jersey-bundle
依赖项(不在本地使用 ivy:install
到 "install"),例如使用以下 Ant 文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:ivy="antlib:org.apache.ivy.ant"
basedir="."
default="retrieve-ivy-deps"
name="foo">
<target name="retrieve-ivy-deps"
description="resolve and retrieve dependencies with ivy">
<ivy:settings file="ivysettings.xml"/>
<ivy:resolve file="ivy.xml"/>
<ivy:retrieve conf="with-transitive"
pattern="ivy-jars/[artifact]-[revision](-[classifier]).[ext]"
sync="true"
type="jar, bundle"/>
</target>
</project>
…和以下 Ivy 文件:
<?xml version="1.0" encoding="ISO-8859-1"?>
<ivy-module version="2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
<info organisation="foo" module="bar"/>
<configurations>
<conf name="with-transitive" description="IVY jars with transitive dependencies"/>
</configurations>
<dependencies>
<dependency org="com.sun.jersey" name="jersey-bundle" rev="1.19.1" conf="with-transitive->default"/>
</dependencies>
</ivy-module>
… 然后,我没有看到任何错误或警告,在操作结束时,我在 ivy-jars
目录中看到两个文件:jersey-bundle-1.19.1.jar
和 jsr311-api-1.1.1.jar
。
我的问题是:
- 失败案例中警告消息的含义和重要性是什么,我该如何解决?
- 为什么 Ant/Ivy 能够从
ibiblio
模块 jersey-bundle 1.19.1
及其所有传递依赖项中拉取而不会失败,但不能 ivy:install
它?换句话说,为什么失败的案例失败了,成功的案例却成功了?
- 在成功的情况下,在相应的 Ivy 文件中,我要求模块及其所有传递依赖项(因为我使用的是
default
配置:<dependency org="com.sun.jersey" name="jersey-bundle" rev="1.19.1" conf="with-transitive->default"/>
)。然而只下载了 2 个 jar。相比之下,当我查看 ivy-1.19.1.xml
时,我看到了大约 20 个依赖项,即使在失败的情况下,当我查看 /tmp/local-ivy-repo/
目录时,我也看到了所有依赖项(除了 moxy 2.3.2
).为什么会出现这种差异?
在安装任务上使用如下配置:
<ivy:install organisation="com.sun.jersey" ... conf="compile"/>
包含配置映射总是一个好主意。该错误似乎是检索不存在的可选 "provided" 范围依赖项的问题。
例子
├── build.xml
├── ivysettings.xml
└── local-ivy-repo
├── com.sun.jersey
│ └── jersey-bundle
│ └── ivys
│ ├── ivy-1.19.1.xml
│ ├── ivy-1.19.1.xml.md5
│ └── ivy-1.19.1.xml.sha1
└── javax.ws.rs
└── jsr311-api
├── ivys
│ ├── ivy-1.1.1.xml
│ ├── ivy-1.1.1.xml.md5
│ └── ivy-1.1.1.xml.sha1
└── jars
├── jsr311-api-1.1.1.jar
├── jsr311-api-1.1.1.jar.md5
└── jsr311-api-1.1.1.jar.sha1
build.xml
<project name="demo" default="build" xmlns:ivy="antlib:org.apache.ivy.ant">
<target name="build">
<ivy:install organisation="com.sun.jersey"
module="jersey-bundle"
revision="1.19.1"
from="public"
to="fs-local"
transitive="true"
overwrite="true"
conf="compile"/>
</target>
</project>
ivysettings.xml
<ivysettings>
<settings defaultResolver="public" />
<resolvers>
<ibiblio name="public" m2compatible="true" />
<filesystem name="fs-local">
<ivy pattern="${ivy.settings.dir}/local-ivy-repo/[organisation]/[module]/ivys/ivy-[revision].xml"/>
<artifact pattern="${ivy.settings.dir}/local-ivy-repo/[organisation]/[module]/[type]s/[artifact]-[revision].[ext]"/>
</filesystem>
</resolvers>
</ivysettings>
我在尝试将 ivy:install
模块 jersey-bundle 1.19.1
放入本地(基于文件系统的)Ivy 解析器时遇到异常。我设法使用下面更短的代码重现了这一点。
失败案例
我在下面的 ivysettings.xml
中定义了两个解析器。一个是 public ibiblio
解析器,另一个是本地(基于文件系统的解析器),我想将模块(及其依赖项)从 ibiblio
复制到其中:
<ivysettings>
<settings defaultResolver="public" />
<resolvers>
<ibiblio name="public" m2compatible="true" />
<filesystem name="fs-local">
<ivy
pattern="/tmp/local-ivy-repo/[organisation]/[module]/ivys/ivy-[revision].xml"/>
<artifact
pattern="/tmp/local-ivy-repo/[organisation]/[module]/[type]s/[artifact]-[revision].[ext]"/>
</filesystem>
</resolvers>
</ivysettings>
使用上面的 ivysettings.xml
文件,然后我有以下 Ant 文件 ivy:install
我感兴趣的模块:
<project name="local repository importation" default="install-locally">
<target name="install-locally" description="import module from public Maven repository and install into local filesystem repository" xmlns:ivy="antlib:org.apache.ivy.ant">
<ivy:settings id="ivysettings-ibiblio-to-local" file="ivysettings.xml"/>
<ivy:install settingsRef="ivysettings-ibiblio-to-local"
organisation="com.sun.jersey"
module="jersey-bundle"
revision="1.19.1"
from="public"
to="fs-local"
transitive="true"
overwrite="true"/>
</target>
</project>
当我执行(使用Ant
)上述文件时,我最终得到以下信息:
:: problems summary ::
:::: WARNINGS
module not found: org.eclipse.persistence#org.eclipse.persistence.moxy;2.3.2
==== public: tried
https://repo1.maven.org/maven2/org/eclipse/persistence/org.eclipse.persistence.moxy/2.3.2/org.eclipse.persistence.moxy-2.3.2.pom
-- artifact org.eclipse.persistence#org.eclipse.persistence.moxy;2.3.2!org.eclipse.persistence.moxy.jar:
https://repo1.maven.org/maven2/org/eclipse/persistence/org.eclipse.persistence.moxy/2.3.2/org.eclipse.persistence.moxy-2.3.2.jar
::::::::::::::::::::::::::::::::::::::::::::::
:: UNRESOLVED DEPENDENCIES ::
::::::::::::::::::::::::::::::::::::::::::::::
:: org.eclipse.persistence#org.eclipse.persistence.moxy;2.3.2: not found
::::::::::::::::::::::::::::::::::::::::::::::
这显然是警告而不是错误(不确定在这种情况下的区别有多重要)。查看 /tmp/local-ivy-repo/
目录,我看到许多模块和 jar(包括 jersey-bundle
)。
成功案例
另一方面,如果我尝试从 public 存储库中拉下 jersey-bundle
依赖项(不在本地使用 ivy:install
到 "install"),例如使用以下 Ant 文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:ivy="antlib:org.apache.ivy.ant"
basedir="."
default="retrieve-ivy-deps"
name="foo">
<target name="retrieve-ivy-deps"
description="resolve and retrieve dependencies with ivy">
<ivy:settings file="ivysettings.xml"/>
<ivy:resolve file="ivy.xml"/>
<ivy:retrieve conf="with-transitive"
pattern="ivy-jars/[artifact]-[revision](-[classifier]).[ext]"
sync="true"
type="jar, bundle"/>
</target>
</project>
…和以下 Ivy 文件:
<?xml version="1.0" encoding="ISO-8859-1"?>
<ivy-module version="2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
<info organisation="foo" module="bar"/>
<configurations>
<conf name="with-transitive" description="IVY jars with transitive dependencies"/>
</configurations>
<dependencies>
<dependency org="com.sun.jersey" name="jersey-bundle" rev="1.19.1" conf="with-transitive->default"/>
</dependencies>
</ivy-module>
… 然后,我没有看到任何错误或警告,在操作结束时,我在 ivy-jars
目录中看到两个文件:jersey-bundle-1.19.1.jar
和 jsr311-api-1.1.1.jar
。
我的问题是:
- 失败案例中警告消息的含义和重要性是什么,我该如何解决?
- 为什么 Ant/Ivy 能够从
ibiblio
模块jersey-bundle 1.19.1
及其所有传递依赖项中拉取而不会失败,但不能ivy:install
它?换句话说,为什么失败的案例失败了,成功的案例却成功了?- 在成功的情况下,在相应的 Ivy 文件中,我要求模块及其所有传递依赖项(因为我使用的是
default
配置:<dependency org="com.sun.jersey" name="jersey-bundle" rev="1.19.1" conf="with-transitive->default"/>
)。然而只下载了 2 个 jar。相比之下,当我查看ivy-1.19.1.xml
时,我看到了大约 20 个依赖项,即使在失败的情况下,当我查看/tmp/local-ivy-repo/
目录时,我也看到了所有依赖项(除了moxy 2.3.2
).为什么会出现这种差异?
- 在成功的情况下,在相应的 Ivy 文件中,我要求模块及其所有传递依赖项(因为我使用的是
在安装任务上使用如下配置:
<ivy:install organisation="com.sun.jersey" ... conf="compile"/>
包含配置映射总是一个好主意。该错误似乎是检索不存在的可选 "provided" 范围依赖项的问题。
例子
├── build.xml
├── ivysettings.xml
└── local-ivy-repo
├── com.sun.jersey
│ └── jersey-bundle
│ └── ivys
│ ├── ivy-1.19.1.xml
│ ├── ivy-1.19.1.xml.md5
│ └── ivy-1.19.1.xml.sha1
└── javax.ws.rs
└── jsr311-api
├── ivys
│ ├── ivy-1.1.1.xml
│ ├── ivy-1.1.1.xml.md5
│ └── ivy-1.1.1.xml.sha1
└── jars
├── jsr311-api-1.1.1.jar
├── jsr311-api-1.1.1.jar.md5
└── jsr311-api-1.1.1.jar.sha1
build.xml
<project name="demo" default="build" xmlns:ivy="antlib:org.apache.ivy.ant">
<target name="build">
<ivy:install organisation="com.sun.jersey"
module="jersey-bundle"
revision="1.19.1"
from="public"
to="fs-local"
transitive="true"
overwrite="true"
conf="compile"/>
</target>
</project>
ivysettings.xml
<ivysettings>
<settings defaultResolver="public" />
<resolvers>
<ibiblio name="public" m2compatible="true" />
<filesystem name="fs-local">
<ivy pattern="${ivy.settings.dir}/local-ivy-repo/[organisation]/[module]/ivys/ivy-[revision].xml"/>
<artifact pattern="${ivy.settings.dir}/local-ivy-repo/[organisation]/[module]/[type]s/[artifact]-[revision].[ext]"/>
</filesystem>
</resolvers>
</ivysettings>