POM版本是什么意思?
example-legacy-plugin 的 pom-scijava 继承自名为 pom.xml 的父级。这个父 POM 定义和配置了许多东西,促进各个插件项目的 POM 更短(即,因此它们彼此重复的事物)并且更加一致(即,因此它们不会忘记定义关键的元数据)。
pom-scijava(撰写论文时14.0.0)的版本指示该父 POM 的版本。我们偶尔会改进父 POM,添加和调整它。当我们这样的时候,它的版本就会增加。建议保留与example-legacy-plugin中相同的版本,因为它指的是最新版本。ImageJ 的未来 1.x 版本将兼容,因此,如果您注意到我们已将 example-legacy-plugin更新为例如15.0.0,您也可以(可选)将插件更新到该版本。
example-legacy-plugin本身的版本(在撰写本文时0.1.0-SNAPSHOT)是你的插件的版本。该字符串附加到JAR文件名(例如example-legacy-plugin-0.1.0-SNAPSHOT.jar),您以便可以区分插件的多个版本。使用您想要的任何版本控制方案。
但是,一旦您对 Maven 更加熟悉,我们建议在分发插件时使用 a SNAPSHOT version during development 和发布(即非快照)版本。原因是为了避免两个不同的 JAR 文件都名为 my-plugin-1.2.3但是内容不同。(这是 Maven 所说的 reproducible builds 的部分。)
例如,当您开发插件时,您可以使用版本 1.0.0-SNAPSHOT 来表明这不是最终的 §§1§§§ 版本,而是最终版本。一旦您对当前形式的插件感到满意,请切换到1.0.0。但请,如果您稍后更改最终 1.0.0 版本的来源(即,没有首先推进 pom.xml 文件中的版本),则出现问题。
依赖版本是如何确定的?
在许多扩展 pom-scijava 的 pom.xml 文件中,您可以看到依赖项版本被简化。这些版本由 pom-scijava 父配置定义(或“管理”),作为其 Bill of Materials 的一部分,例如,here 是定义 ImageJ 版本的位置。
如何确定我实际需要哪些 Maven 项目(即依赖项)?
一种检查方法是使用依赖插件,如下所示:
mvn dependency:analyze
这会告诉你:
1.您声明但实际没有使用的依赖项;和 2.您没有直接声明但实际需要的依赖项。
请注意,只有当您的项目编译成功时,这才有效。换句话说,从“太多”依赖项开始并减少依赖项,比尝试从零开始“构建”要容易得多。
这是什么:属性“scijava.app.directory”未设置;跳过复制罐
这是 scijava-maven-plugin 的部分(由 pom-scijava 为您实现)。正如您所怀疑的,会将插件的 .jar文件及其依赖项复制到应用程序 jars 或 plugins 文件夹中。因此,您必须提供应用程序的路径(例如 Fiji.app)作为 Maven 的附加参数:
mvn -Dscijava.app.directory=YourPath/Fiji.app
您可以通过文件$HOME/.m2/settings.xml(其中$HOME是您的主目录)来自动执行此操作,其中创建包含以下内容:
<settings>
<profiles>
<profile>
<id>imagej</id>
<activation>
<file>
<exists>${env.HOME}/Desktop/Fiji.app</exists>
</file>
</activation>
<properties>
<scijava.app.directory>${env.HOME}/Desktop/Fiji.app</scijava.app.directory>
</properties>
</profile>
</profiles>
</settings>
完成此类用户范围设置后,您的所有 Maven 构建都会自动将构建工件复制到 $HOME/Desktop/Fiji.app 中的 Fiji 安装中。当然,您可以将路径更改为您喜欢的任何路径。
我的软件依赖于.jar文件,该文件无法通过Maven获得!
写信给Image.sc Forum寻求帮助。最好的解决方案将您的依赖项部署到SciJava Maven repository。
有关此问题的各种解决方案的深入讨论,请参见Playing Tradeoffs with Maven。
我可以通过 Maven 调用 svnversion 吗?
通常,您希望将当前修订版本放入“关于”框或类似的内容中。
一般来说,您可以使用maven-antrun-plugin调用任何需要的Ant功能。但是,对于“关于”框,有一个更好的解决方案:
pom-scijava 父级使用 buildnumber-maven-plugin 将 SCM 修订版本和日期嵌入到 JAR 清单中。
您的“关于”对话框可以通过添加对 scijava-common 的依赖项来访问信息,如下所示:
import org.scijava.util.VersionUtils;
...
String version = VersionUtils.getVersion(MyBeautifulPlugin.class);
#修改如何使用 Maven 使后的项目供给依赖项目使用?
参见Using snapshot couplings during development。
如何使用Maven单独运行的测试?
如第here所述:
mvn -Dtest='TestCircle#mytest' test
在哪里可以找到有关 Maven 的更多信息?
请参见第Maven页!