Ivy's Resolvers

本文介绍如何在Ivy中定义依赖解析器,包括内置解析器和自定义解析器的使用方法。通过不同类型的解析器可以高效地管理和查找依赖项。

Defines a list of dependency resolvers usable in ivy. Each dependency resolver is identified by its name, given as an attribute.

The child tag used for the dependency resolver must be equal to a name of a dependency resolver type (either built-in or added with the typedef tag).

since 1.3 Once defined, resolvers can be referenced by their name, using the following syntax:

<resolver ref="alreadydefinedresolver"/>

Note that this works only if the resolver has been already defined, and not if it is defined later in the ivysettings file.

Child elements

ElementDescriptionCardinality
any resolveradds a resolver to the list of available resolvers1..n

Built-in Resolvers

Ivy comes with a set of built-in dependency resolvers able to answer to the most common needs.

If you don't find the one you want here, you can also check if some one has not contributed it in the links page, or even write your own.

There are basically two types of resolver in Ivy: composite and standard resolvers. A composite resolver is a resolver which delegates the work to other resolvers. The other resolvers are standard resolvers.

Here is the list of built-in resolvers:

NameTypeDescription
IvyRepStandardFinds ivy files on ivyrep and artifacts on ibiblio.
IBiblioStandardFinds artifacts on ibiblio.
PackagerStandardFinds ivy files and packaging instructions via URLs, then creates artifacts by following the instructions.
FileSystemStandardThis very performant resolver finds ivy files and artifacts in your file system.
UrlStandardFinds ivy files and artifacts in any repository accessible with urls.
VfsStandardFinds ivy files and artifacts in any repository accessible with apache commons vfs.
sshStandardFinds ivy files and artifacts in any repository accessible with ssh.
sftpStandardFinds ivy files and artifacts in any repository accessible with sftp.
ChainCompositeDelegates the finding to a chain of sub resolvers.
DualCompositeDelegates the finding of ivy files to one resolver and of artifacts to another.

Common features and attributes

All resolvers of the same type share some common features and attributes detailed here.

Features

validation

All standard resolvers support several options for validation.

The validate attribute is used to configure if Ivy files should be checked against the Ivy file xml schema.

The checkconsistency attribute allow to enable or disable consistency checking between what is expected by Ivy when it finds a module descriptor, and what the module descriptor actually contains.

The descriptor attribute let one define if module descriptors are mandatory or optional.

The checksums attribute is used to define the list of checksums files to use to check the content of downloaded files has not been corrupted (eg during transfer).

force

Any standard resolver can be used in force mode, which is used mainly to handle local development builds. In force mode, the resolver attempts to find a dependency whatever the requested revision is (internally it replace the requested revision by 'latest.integration'), and if it finds one, it forces this revision to be returned, even when used in a chain with returnFirst=false.

By using such a resolver at the beginning of a chain, you can be sure that Ivy will pick up whatever module is available in this resolver (usually a private local build) instead of the real requested revision. This allows to handle use case like a developer working on modules A and C, where A -> B -> C, and pick up the local build for C without having to publish a local version of B.
since 2.0

Attributes

AttributeDescriptionRequiredCompositeStandard
namethe name which identify the resolverYesYesYes
validateindicates if resolved ivy files should be validated against ivy xsdNo, defaults to call settingYesYes
forceIndicates if this resolver should be used in force mode (see above). since 2.0 No, defaults to falseNoYes
checkmodifiedIndicates if this resolver should check lastmodified date to know if an ivy file is up to date.No, defaults to ${ivy.resolver.default.check.modified}NoYes
changingPatternIndicates for which revision pattern this resolver should check lastmodified date to know if an artifact file is up to date. since 1.4. See cache and change management for details.No, defaults to noneYesYes
changingMatcherThe name of the pattern matcher to use to match a revision against the configured changingPattern. since 1.4. See cache and change management for details.No, defaults to exactOrRegexpYesYes
alwaysCheckExactRevisionIndicates if this resolver should check the given revision even if it's a special one (like latest.integration). since 1.3 No, defaults to ${ivy.default.always.check.exact.revision}NoYes
namespaceThe name of the namespace to which this resolver belong since 1.3 No, defaults to 'system'YesYes
checkconsistencytrue to check consistency of module descriptors found by this resolver, false to avoid consistency check since 1.3 No, defaults to trueNoYes
descriptor'optional' if a module descriptor (usually an ivy file) is optional for this resolver, 'required' to refuse modules without module descriptor since 2.0 No, defaults to 'optional'No (except dual)Yes
allownomd DEPRECATED. Use descriptor="required | optional" instead.
true if the absence of module descriptor (usually an ivy file) is authorised for this resolver, false to refuse modules without module descriptor since 1.4
No, defaults to trueNo (except dual)Yes
checksumsa comma separated list of checksum algorithms to use both for publication and checking since 1.4 No, defaults to ${ivy.checksums}NoYes
latestThe name of the latest strategy to use.No, defaults to 'default'YesYes
cacheThe name of the cache manager to use.No, defaults to the value of the default attribute of cachesNoYes

Examples

<resolvers>
<filesystem name="1" cache="cache-1">
<ivy pattern="${ivy.settings.dir}/1/[organisation]/[module]/ivys/ivy-[revision].xml"/>
<artifact pattern="${ivy.settings.dir}/1/[organisation]/[module]/[type]s/[artifact]-[revision].[ext]"/>
</filesystem>
<chain name="chain1">
<resolver ref="1"/>
<ivyrep name="ivyrep"/>
</chain>
<chain name="chain2" returnFirst="true" dual="true">
<resolver ref="1"/>
<ibiblio name="ibiblio"/>
</chain>
</resolvers>

Defines a filesystem resolver, named '1', which is then used in two chains, the first which seconds the filesystem resolver with an ivyrep resolver, and second which seconds the filesystem resolver with an ibiblio resolver, and which returns the first module found, and uses the whole chain to download artifacts (see corresponding resolvers documentation for details about them). Resolver 1 will use a cache named 'cache-1' which should have been defined under the caches element.

 

go http://ant.apache.org/ivy/history/2.1.0-rc2/settings/resolvers.html

root@Ubuntu:/home/rt/chisel-examples/hello-world# sbt clean update [info] welcome to sbt 1.10.11 (Ubuntu Java 21.0.6) [info] loading project definition from /home/rt/chisel-examples/hello-world/project [info] loading settings for project hello-world from build.sbt... [info] set current project to hello-world (in build file:/home/rt/chisel-examples/hello-world/) [success] Total time: 0 s, completed 2025年3月26日 17:08:13 [info] Updating hello-world_2.12 [info] Resolved hello-world_2.12 dependencies [warn] [warn] Note: Unresolved dependencies path: [error] sbt.librarymanagement.ResolveException: Error downloading edu.berkeley.cs:chisel3-plugin_2.12.18:3.5.3 [error] Not found [error] Not found [error] not found: /root/.ivy2/localedu.berkeley.cs/chisel3-plugin_2.12.18/3.5.3/ivys/ivy.xml [error] not found: https://repo1.maven.org/maven2/edu/berkeley/cs/chisel3-plugin_2.12.18/3.5.3/chisel3-plugin_2.12.18-3.5.3.pom [error] at lmcoursier.CoursierDependencyResolution.unresolvedWarningOrThrow(CoursierDependencyResolution.scala:347) [error] at lmcoursier.CoursierDependencyResolution.$anonfun$update$39(CoursierDependencyResolution.scala:316) [error] at scala.util.Either$LeftProjection.map(Either.scala:573) [error] at lmcoursier.CoursierDependencyResolution.update(CoursierDependencyResolution.scala:316) [error] at sbt.librarymanagement.DependencyResolution.update(DependencyResolution.scala:60) [error] at sbt.internal.LibraryManagement$.resolve$1(LibraryManagement.scala:60) [error] at sbt.internal.LibraryManagement$.$anonfun$cachedUpdate$12(LibraryManagement.scala:142) [error] at sbt.util.Tracked$.$anonfun$lastOutput$1(Tracked.scala:74) [error] at sbt.internal.LibraryManagement$.$anonfun$cachedUpdate$11(LibraryManagement.scala:144) [error] at sbt.internal.LibraryManagement$.$anonfun$cachedUpdate$11$adapted(LibraryManagement.scala:131) [error] at sbt.util.Tracked$.$anonfun$inputChangedW$1(Tracked.scala:220 [error] at sbt.internal.LibraryManagement$.cachedUpdate(
03-27
2025-05-11 02:49:03,576 INFO o.a.j.e.StandardJMeterEngine: Running the test! 2025-05-11 02:49:03,577 INFO o.a.j.s.SampleEvent: List of sample_variables: [] 2025-05-11 02:49:03,577 INFO o.a.j.s.SampleEvent: List of sample_variables: [] 2025-05-11 02:49:03,578 INFO o.a.j.e.u.CompoundVariable: Note: Function class names must contain the string: '.functions.' 2025-05-11 02:49:03,578 INFO o.a.j.e.u.CompoundVariable: Note: Function class names must not contain the string: '.gui.' 2025-05-11 02:49:03,781 INFO o.a.j.g.u.JMeterMenuBar: setRunning(true, *local*) 2025-05-11 02:49:03,887 INFO o.a.j.e.StandardJMeterEngine: Starting ThreadGroup: 1 : 线程组 2025-05-11 02:49:03,887 INFO o.a.j.e.StandardJMeterEngine: Starting 1 threads for group 线程组. 2025-05-11 02:49:03,887 INFO o.a.j.e.StandardJMeterEngine: Thread will continue on error 2025-05-11 02:49:03,887 INFO o.a.j.t.ThreadGroup: Starting thread group... number=1 threads=1 ramp-up=1 delayedStart=false 2025-05-11 02:49:03,899 INFO o.a.j.t.ThreadGroup: Started thread group number 1 2025-05-11 02:49:03,899 INFO o.a.j.e.StandardJMeterEngine: All thread groups have been started 2025-05-11 02:49:03,901 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-1 2025-05-11 02:49:03,912 INFO o.a.j.p.h.s.HTTPHCAbstractImpl: Local host = DESKTOP-1UPGIAU 2025-05-11 02:49:03,916 INFO o.a.j.p.h.s.HTTPHC4Impl: HTTP request retry count = 0 2025-05-11 02:49:04,239 INFO o.a.j.s.FileServer: Stored: D:/项目/1、联赢激光/SW切换/外购件模型/外购件下载 - 副本.csv 2025-05-11 02:49:09,346 ERROR o.a.j.e.JSR223PostProcessor: Problem in JSR223 script, JSR223 后置处理程序 javax.script.ScriptException: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: General error during conversion: No suitable ClassLoader found for grab java.lang.RuntimeException: No suitable ClassLoader found for grab at groovy.grape.GrapeIvy.chooseClassLoader(GrapeIvy.groovy:179) at groovy.grape.GrapeIvy.grab(GrapeIvy.groovy:249) at groovy.grape.Grape$1.run(Grape.java:174) at groovy.grape.Grape$1.run(Grape.java:160) at java.security.AccessController.doPrivileged(Native Method) at groovy.grape.Grape.grab(Grape.java:160) at groovy.grape.GrabAnnotationTransformation.visit(GrabAnnotationTransformation.java:377) at org.codehaus.groovy.transform.ASTTransformationVisitor.lambda$addPhaseOperationsForGlobalTransforms$4(ASTTransformationVisitor.java:338) at org.codehaus.groovy.control.CompilationUnit$ISourceUnitOperation.doPhaseOperation(CompilationUnit.java:901) at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:671) at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:635) at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:389) at groovy.lang.GroovyClassLoader.lambda$parseClass$3(GroovyClassLoader.java:332) at org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163) at org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:330) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:314) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:257) at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.getScriptClass(GroovyScriptEngineImpl.java:336) at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.compile(GroovyScriptEngineImpl.java:181) at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:211) at org.apache.jmeter.extractor.JSR223PostProcessor.process(JSR223PostProcessor.java:45) at org.apache.jmeter.threads.JMeterThread.runPostProcessors(JMeterThread.java:968) at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:585) at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501) at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:268) at java.lang.Thread.run(Thread.java:748) 1 error at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.compile(GroovyScriptEngineImpl.java:183) ~[groovy-jsr223-3.0.11.jar:3.0.11] at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:211) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.extractor.JSR223PostProcessor.process(JSR223PostProcessor.java:45) ~[ApacheJMeter_components.jar:5.5] at org.apache.jmeter.threads.JMeterThread.runPostProcessors(JMeterThread.java:968) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:585) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:268) ~[ApacheJMeter_core.jar:5.5] at java.lang.Thread.run(Thread.java:748) ~[?:1.8.0_172] Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: General error during conversion: No suitable ClassLoader found for grab java.lang.RuntimeException: No suitable ClassLoader found for grab at groovy.grape.GrapeIvy.chooseClassLoader(GrapeIvy.groovy:179) at groovy.grape.GrapeIvy.grab(GrapeIvy.groovy:249) at groovy.grape.Grape$1.run(Grape.java:174) at groovy.grape.Grape$1.run(Grape.java:160) at java.security.AccessController.doPrivileged(Native Method) at groovy.grape.Grape.grab(Grape.java:160) at groovy.grape.GrabAnnotationTransformation.visit(GrabAnnotationTransformation.java:377) at org.codehaus.groovy.transform.ASTTransformationVisitor.lambda$addPhaseOperationsForGlobalTransforms$4(ASTTransformationVisitor.java:338) at org.codehaus.groovy.control.CompilationUnit$ISourceUnitOperation.doPhaseOperation(CompilationUnit.java:901) at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:671) at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:635) at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:389) at groovy.lang.GroovyClassLoader.lambda$parseClass$3(GroovyClassLoader.java:332) at org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163) at org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:330) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:314) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:257) at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.getScriptClass(GroovyScriptEngineImpl.java:336) at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.compile(GroovyScriptEngineImpl.java:181) at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:211) at org.apache.jmeter.extractor.JSR223PostProcessor.process(JSR223PostProcessor.java:45) at org.apache.jmeter.threads.JMeterThread.runPostProcessors(JMeterThread.java:968) at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:585) at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501) at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:268) at java.lang.Thread.run(Thread.java:748) 1 error at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:292) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.control.ErrorCollector.addException(ErrorCollector.java:140) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.control.SourceUnit.addException(SourceUnit.java:309) ~[groovy-3.0.11.jar:3.0.11] at groovy.grape.GrabAnnotationTransformation.visit(GrabAnnotationTransformation.java:386) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.transform.ASTTransformationVisitor.lambda$addPhaseOperationsForGlobalTransforms$4(ASTTransformationVisitor.java:338) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.control.CompilationUnit$ISourceUnitOperation.doPhaseOperation(CompilationUnit.java:901) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:671) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:635) ~[groovy-3.0.11.jar:3.0.11] at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:389) ~[groovy-3.0.11.jar:3.0.11] at groovy.lang.GroovyClassLoader.lambda$parseClass$3(GroovyClassLoader.java:332) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154) ~[groovy-3.0.11.jar:3.0.11] at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:330) ~[groovy-3.0.11.jar:3.0.11] at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:314) ~[groovy-3.0.11.jar:3.0.11] at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:257) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.getScriptClass(GroovyScriptEngineImpl.java:336) ~[groovy-jsr223-3.0.11.jar:3.0.11] at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.compile(GroovyScriptEngineImpl.java:181) ~[groovy-jsr223-3.0.11.jar:3.0.11] ... 7 more 2025-05-11 02:49:12,595 ERROR o.a.j.e.JSR223PostProcessor: Problem in JSR223 script, JSR223 后置处理程序 javax.script.ScriptException: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: General error during conversion: No suitable ClassLoader found for grab java.lang.RuntimeException: No suitable ClassLoader found for grab at groovy.grape.GrapeIvy.chooseClassLoader(GrapeIvy.groovy:179) at groovy.grape.GrapeIvy.grab(GrapeIvy.groovy:249) at groovy.grape.Grape$1.run(Grape.java:174) at groovy.grape.Grape$1.run(Grape.java:160) at java.security.AccessController.doPrivileged(Native Method) at groovy.grape.Grape.grab(Grape.java:160) at groovy.grape.GrabAnnotationTransformation.visit(GrabAnnotationTransformation.java:377) at org.codehaus.groovy.transform.ASTTransformationVisitor.lambda$addPhaseOperationsForGlobalTransforms$4(ASTTransformationVisitor.java:338) at org.codehaus.groovy.control.CompilationUnit$ISourceUnitOperation.doPhaseOperation(CompilationUnit.java:901) at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:671) at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:635) at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:389) at groovy.lang.GroovyClassLoader.lambda$parseClass$3(GroovyClassLoader.java:332) at org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163) at org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:330) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:314) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:257) at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.getScriptClass(GroovyScriptEngineImpl.java:336) at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.compile(GroovyScriptEngineImpl.java:181) at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:211) at org.apache.jmeter.extractor.JSR223PostProcessor.process(JSR223PostProcessor.java:45) at org.apache.jmeter.threads.JMeterThread.runPostProcessors(JMeterThread.java:968) at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:585) at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501) at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:268) at java.lang.Thread.run(Thread.java:748) 1 error at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.compile(GroovyScriptEngineImpl.java:183) ~[groovy-jsr223-3.0.11.jar:3.0.11] at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:211) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.extractor.JSR223PostProcessor.process(JSR223PostProcessor.java:45) ~[ApacheJMeter_components.jar:5.5] at org.apache.jmeter.threads.JMeterThread.runPostProcessors(JMeterThread.java:968) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:585) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:268) ~[ApacheJMeter_core.jar:5.5] at java.lang.Thread.run(Thread.java:748) ~[?:1.8.0_172] Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: General error during conversion: No suitable ClassLoader found for grab java.lang.RuntimeException: No suitable ClassLoader found for grab at groovy.grape.GrapeIvy.chooseClassLoader(GrapeIvy.groovy:179) at groovy.grape.GrapeIvy.grab(GrapeIvy.groovy:249) at groovy.grape.Grape$1.run(Grape.java:174) at groovy.grape.Grape$1.run(Grape.java:160) at java.security.AccessController.doPrivileged(Native Method) at groovy.grape.Grape.grab(Grape.java:160) at groovy.grape.GrabAnnotationTransformation.visit(GrabAnnotationTransformation.java:377) at org.codehaus.groovy.transform.ASTTransformationVisitor.lambda$addPhaseOperationsForGlobalTransforms$4(ASTTransformationVisitor.java:338) at org.codehaus.groovy.control.CompilationUnit$ISourceUnitOperation.doPhaseOperation(CompilationUnit.java:901) at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:671) at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:635) at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:389) at groovy.lang.GroovyClassLoader.lambda$parseClass$3(GroovyClassLoader.java:332) at org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163) at org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:330) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:314) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:257) at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.getScriptClass(GroovyScriptEngineImpl.java:336) at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.compile(GroovyScriptEngineImpl.java:181) at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:211) at org.apache.jmeter.extractor.JSR223PostProcessor.process(JSR223PostProcessor.java:45) at org.apache.jmeter.threads.JMeterThread.runPostProcessors(JMeterThread.java:968) at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:585) at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501) at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:268) at java.lang.Thread.run(Thread.java:748) 1 error at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:292) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.control.ErrorCollector.addException(ErrorCollector.java:140) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.control.SourceUnit.addException(SourceUnit.java:309) ~[groovy-3.0.11.jar:3.0.11] at groovy.grape.GrabAnnotationTransformation.visit(GrabAnnotationTransformation.java:386) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.transform.ASTTransformationVisitor.lambda$addPhaseOperationsForGlobalTransforms$4(ASTTransformationVisitor.java:338) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.control.CompilationUnit$ISourceUnitOperation.doPhaseOperation(CompilationUnit.java:901) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:671) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:635) ~[groovy-3.0.11.jar:3.0.11] at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:389) ~[groovy-3.0.11.jar:3.0.11] at groovy.lang.GroovyClassLoader.lambda$parseClass$3(GroovyClassLoader.java:332) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154) ~[groovy-3.0.11.jar:3.0.11] at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:330) ~[groovy-3.0.11.jar:3.0.11] at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:314) ~[groovy-3.0.11.jar:3.0.11] at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:257) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.getScriptClass(GroovyScriptEngineImpl.java:336) ~[groovy-jsr223-3.0.11.jar:3.0.11] at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.compile(GroovyScriptEngineImpl.java:181) ~[groovy-jsr223-3.0.11.jar:3.0.11] ... 7 more 2025-05-11 02:49:15,800 ERROR o.a.j.e.JSR223PostProcessor: Problem in JSR223 script, JSR223 后置处理程序 javax.script.ScriptException: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: General error during conversion: No suitable ClassLoader found for grab java.lang.RuntimeException: No suitable ClassLoader found for grab at groovy.grape.GrapeIvy.chooseClassLoader(GrapeIvy.groovy:179) at groovy.grape.GrapeIvy.grab(GrapeIvy.groovy:249) at groovy.grape.Grape$1.run(Grape.java:174) at groovy.grape.Grape$1.run(Grape.java:160) at java.security.AccessController.doPrivileged(Native Method) at groovy.grape.Grape.grab(Grape.java:160) at groovy.grape.GrabAnnotationTransformation.visit(GrabAnnotationTransformation.java:377) at org.codehaus.groovy.transform.ASTTransformationVisitor.lambda$addPhaseOperationsForGlobalTransforms$4(ASTTransformationVisitor.java:338) at org.codehaus.groovy.control.CompilationUnit$ISourceUnitOperation.doPhaseOperation(CompilationUnit.java:901) at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:671) at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:635) at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:389) at groovy.lang.GroovyClassLoader.lambda$parseClass$3(GroovyClassLoader.java:332) at org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163) at org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:330) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:314) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:257) at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.getScriptClass(GroovyScriptEngineImpl.java:336) at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.compile(GroovyScriptEngineImpl.java:181) at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:211) at org.apache.jmeter.extractor.JSR223PostProcessor.process(JSR223PostProcessor.java:45) at org.apache.jmeter.threads.JMeterThread.runPostProcessors(JMeterThread.java:968) at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:585) at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501) at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:268) at java.lang.Thread.run(Thread.java:748) 1 error at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.compile(GroovyScriptEngineImpl.java:183) ~[groovy-jsr223-3.0.11.jar:3.0.11] at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:211) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.extractor.JSR223PostProcessor.process(JSR223PostProcessor.java:45) ~[ApacheJMeter_components.jar:5.5] at org.apache.jmeter.threads.JMeterThread.runPostProcessors(JMeterThread.java:968) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:585) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:268) ~[ApacheJMeter_core.jar:5.5] at java.lang.Thread.run(Thread.java:748) ~[?:1.8.0_172] Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: General error during conversion: No suitable ClassLoader found for grab java.lang.RuntimeException: No suitable ClassLoader found for grab at groovy.grape.GrapeIvy.chooseClassLoader(GrapeIvy.groovy:179) at groovy.grape.GrapeIvy.grab(GrapeIvy.groovy:249) at groovy.grape.Grape$1.run(Grape.java:174) at groovy.grape.Grape$1.run(Grape.java:160) at java.security.AccessController.doPrivileged(Native Method) at groovy.grape.Grape.grab(Grape.java:160) at groovy.grape.GrabAnnotationTransformation.visit(GrabAnnotationTransformation.java:377) at org.codehaus.groovy.transform.ASTTransformationVisitor.lambda$addPhaseOperationsForGlobalTransforms$4(ASTTransformationVisitor.java:338) at org.codehaus.groovy.control.CompilationUnit$ISourceUnitOperation.doPhaseOperation(CompilationUnit.java:901) at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:671) at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:635) at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:389) at groovy.lang.GroovyClassLoader.lambda$parseClass$3(GroovyClassLoader.java:332) at org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163) at org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:330) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:314) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:257) at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.getScriptClass(GroovyScriptEngineImpl.java:336) at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.compile(GroovyScriptEngineImpl.java:181) at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:211) at org.apache.jmeter.extractor.JSR223PostProcessor.process(JSR223PostProcessor.java:45) at org.apache.jmeter.threads.JMeterThread.runPostProcessors(JMeterThread.java:968) at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:585) at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501) at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:268) at java.lang.Thread.run(Thread.java:748) 1 error at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:292) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.control.ErrorCollector.addException(ErrorCollector.java:140) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.control.SourceUnit.addException(SourceUnit.java:309) ~[groovy-3.0.11.jar:3.0.11] at groovy.grape.GrabAnnotationTransformation.visit(GrabAnnotationTransformation.java:386) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.transform.ASTTransformationVisitor.lambda$addPhaseOperationsForGlobalTransforms$4(ASTTransformationVisitor.java:338) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.control.CompilationUnit$ISourceUnitOperation.doPhaseOperation(CompilationUnit.java:901) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:671) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:635) ~[groovy-3.0.11.jar:3.0.11] at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:389) ~[groovy-3.0.11.jar:3.0.11] at groovy.lang.GroovyClassLoader.lambda$parseClass$3(GroovyClassLoader.java:332) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154) ~[groovy-3.0.11.jar:3.0.11] at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:330) ~[groovy-3.0.11.jar:3.0.11] at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:314) ~[groovy-3.0.11.jar:3.0.11] at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:257) ~[groovy-3.0.11.jar:3.0.11] at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.getScriptClass(GroovyScriptEngineImpl.java:336) ~[groovy-jsr223-3.0.11.jar:3.0.11] at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.compile(GroovyScriptEngineImpl.java:181) ~[groovy-jsr223-3.0.11.jar:3.0.11] ... 7 more 2025-05-11 02:49:15,802 INFO o.a.j.t.JMeterThread: Stop Thread seen for thread 线程组 1-1, reason: org.apache.jorphan.util.JMeterStopThreadException: End of file:D:/项目/1、联赢激光/SW切换/外购件模型/外购件下载 - 副本.csv detected for CSV DataSet:CSV 数据文件设置 configured with stopThread:true, recycle:false 2025-05-11 02:49:15,802 INFO o.a.j.t.JMeterThread: Thread finished: 线程组 1-1 2025-05-11 02:49:15,803 INFO o.a.j.e.StandardJMeterEngine: Notifying test listeners of end of test 2025-05-11 02:49:15,804 INFO o.a.j.s.FileServer: Close: D:/项目/1、联赢激光/SW切换/外购件模型/外购件下载 - 副本.csv 2025-05-11 02:49:15,807 INFO o.a.j.g.u.JMeterMenuBar: setRunning(false, *local*)
05-12
采用PyQt5框架与Python编程语言构建图书信息管理平台 本项目基于Python编程环境,结合PyQt5图形界面开发库,设计实现了一套完整的图书信息管理解决方案。该系统主要面向图书馆、书店等机构的日常运营需求,通过模块化设计实现了图书信息的标准化管理流程。 系统架构采用典型的三层设计模式,包含数据存储层、业务逻辑层和用户界面层。数据持久化方案支持SQLite轻量级数据库与MySQL企业级数据库的双重配置选项,通过统一的数据库操作接口实现数据存取隔离。在数据建模方面,设计了包含图书基本信息、读者档案、借阅记录等核心数据实体,各实体间通过主外键约束建立关联关系。 核心功能模块包含六大子系统: 1. 图书编目管理:支持国际标准书号、中国图书馆分类法等专业元数据的规范化著录,提供批量导入与单条录入两种数据采集方式 2. 库存动态监控:实时追踪在架数量、借出状态、预约队列等流通指标,设置库存预警阈值自动提醒补货 3. 读者服务管理:建立完整的读者信用评价体系,记录借阅历史与违规行为,实施差异化借阅权限管理 4. 流通业务处理:涵盖借书登记、归还处理、续借申请、逾期计算等标准业务流程,支持射频识别技术设备集成 5. 统计报表生成:按日/月/年周期自动生成流通统计、热门图书排行、读者活跃度等多维度分析图表 6. 系统维护配置:提供用户权限分级管理、数据备份恢复、操作日志审计等管理功能 在技术实现层面,界面设计遵循Material Design设计规范,采用QSS样式表实现视觉定制化。通过信号槽机制实现前后端数据双向绑定,运用多线程处理技术保障界面响应流畅度。数据验证机制包含前端格式校验与后端业务规则双重保障,关键操作均设有二次确认流程。 该系统适用于中小型图书管理场景,通过可扩展的插件架构支持功能模块的灵活组合。开发过程中特别注重代码的可维护性,采用面向对象编程范式实现高内聚低耦合的组件设计,为后续功能迭代奠定技术基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
### 关于 unplugin-auto-import 的 resolvers 配置 `unplugin-auto-import` 是一个用于自动导入 API 或工具函数的插件,广泛应用于 Vue 和 React 等前端框架项目中。通过 `resolvers`,可以自定义需要自动导入的内容及其路径。 以下是关于如何使用或配置 `resolvers` 的详细介绍: #### 自动导入的基础概念 `resolvers` 提供了一种机制来指定哪些模块中的成员应该被自动导入。这些成员通常是一些常用的库函数、组件或者全局变量。例如,在 Vue 项目中,可以通过 `resolvers` 来自动导入 Vuex 中的状态管理方法或 Composition API 函数[^1]。 #### 安装依赖 在开始之前,请确保已经安装了 `unplugin-auto-import` 及其相关依赖项: ```bash npm install unplugin-auto-import --save-dev ``` #### 基本配置示例 以下是一个典型的 Vite/Vue 项目的配置文件 (`vite.config.js`) 示例,展示了如何设置 `resolvers`: ```javascript import AutoImport from 'unplugin-auto-import/vite'; import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'; export default { plugins: [ AutoImport({ imports: ['vue', 'vue-router'], // 默认支持的库 resolvers: [ElementPlusResolver()], // 自定义 resolver dts: './auto-imports.d.ts' // 自动生成声明文件的位置 }) ] }; ``` 在此配置中,`ElementPlusResolver()` 被用来解析并自动导入来自 Element Plus 组件库的相关功能[^2]。 #### 创建自定义 Resolver 如果默认提供的 Resolvers 不满足需求,则可以创建自己的 Resolver。下面是如何实现的一个简单例子: ```javascript function CustomResolver() { return { type: 'component', resolve(name) { if (name.startsWith('Custom')) { return `${name}/path/to/components/${name}.js`; } }, }; } ``` 此代码片段展示了一个名为 `CustomResolver` 的函数,它会尝试匹配以字符串 `"Custom"` 开头的所有名称,并返回对应的模块路径[^3]。 #### 结合 TypeScript 使用 当与 TypeScript 一起工作时,推荐启用 `dts` 参数以便生成类型声明文件。这有助于 IDE 更好地识别和提示已导入的对象。 ```javascript AutoImport({ ... dts: true, }); ``` 以上步骤完成后,重新启动开发服务器即可生效新的 auto-import 设置[^4]。 ### 总结 通过合理利用 `unplugin-auto-import` 插件以及它的核心特性——`resolvers`,开发者能够极大地简化日常编码流程,减少手动引入重复代码的工作量。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值