Mau*_*uli 10 java maven-2 build
如果我使用maven-dependency-plugin插件,那么我就无法使用版本范围.此外,虽然较新版本在远程存储库中,但似乎未定义工件的版本.
为什么会这样?
使用maven-dependency-plugin除了其他maven之外的其他一些机制来解决依赖关系?如果是这样的话,为什么呢?
这是一个例子:
我创建了一个项目org.example:org.example.simple.project1:jar并使用版本1.0.0-SNAPSHOT,1.0.0,1.0.1和1.1.0-SNAPSHOT将它放入存储库
我现在以下列方式配置依赖插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack-stuff<id>
<phase>initialize</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.example</groupId>
<artifactId>org.example.simple.project1.</artifactId>
<version>[1.0,1.1)</version>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>target/stuff</outputDirectory>
<includes>**/*.*</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
如果依赖关系解析与其他依赖关系相同,那么版本应该(至少在我看来)解析为1.0.1.
相反,我得到以下异常:
[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] version was null for org.example:org.example.simple.project1.
[INFO] ------------------------------------------------------------------------
[INFO] Trace
java.lang.NullPointerException: version was null for org.example:org.example.simple.project1.
at org.apache.maven.artifact.DefaultArtifact.getBaseVersion(DefaultArtifact.java:362)
at org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout.pathOf(DefaultRepositoryLayout.java:47)
at org.apache.maven.artifact.repository.DefaultArtifactRepository.pathOf(DefaultArtifactRepository.java:110)
at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:125)
at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:74)
at org.apache.maven.plugin.dependency.fromConfiguration.AbstractFromConfigurationMojo.getArtifact(AbstractFromConfigurationMojo.java:242)
at org.apache.maven.plugin.dependency.fromConfiguration.AbstractFromConfigurationMojo.getProcessedArtifactItems(AbstractFromConfigurationMojo.java:143)
at org.apache.maven.plugin.dependency.fromConfiguration.UnpackMojo.getProcessedArtifactItems(UnpackMojo.java:138)
at org.apache.maven.plugin.dependency.fromConfiguration.UnpackMojo.execute(UnpackMojo.java:88)
at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:453)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:559)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:500)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:479)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:331)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:292)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:142)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:336)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:129)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:301)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4 seconds
[INFO] Finished at: Mon Aug 03 17:21:41 CEST 2009
[INFO] Final Memory: 13M/133M
[INFO] ------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
Bri*_*Fox 20
好的,这是真正的答案(我编写了依赖插件):
解包和复制目标必须复制一些核心解析代码.不幸的是,解析代码实际上并不是一种可用的形式.因此,这些目标不能处理版本范围,也不能直接从反应堆中解析工件(坦率地说,我从未实现它们,因为它打破了太多现有的用例,是核心解决方案代码那么糟糕)
更好的方法是使用这些目标的xxx依赖形式.这些目标要求Maven在调用之前执行解决方案,因此它是100%兼容的.您可以使用像groupId和artifactId过滤器这样的过滤器来有效地获取所需的工件列表,最终结果将是相同的.
复制和解压缩肯定更灵活,旨在用于我当时使用的更简单的用例.知道我现在知道的东西,我可能会更像是xxx-dependencies表单开始实现它.
总而言之,在Maven 3中,解析代码最终完全解耦...依赖插件驱动了大部分用例.我将开始研究新版本的插件,以便尽快充分利用它...虽然它需要maven 3,但它最终将100%完成所有目标.
| 归档时间: |
|
| 查看次数: |
8620 次 |
| 最近记录: |