我希望能够在离线时从Maven原型启动项目。但我无法找到有关如何缓存Maven原型以供离线使用的明确说明。有没有人有任何建议?
答案 0 :(得分:3)
Maven原型毕竟是一个工件,因此它将在第一次使用时由Maven自动缓存。以后的用法将始终首先运行获取的工件(从本地缓存)。我们还可以强制Maven仅使用缓存(离线模式,如下所述)。
因此,您可以简单地调用一次相关的原型(即虚拟项目)并让它们脱机以进行进一步的调用。
如果您确实想要提前缓存它,可以使用Maven Dependency Plugin及其get目标将原型Maven缓存添加到本地Maven缓存中。
例如,让我们按如下方式缓存Maven Quickstart Archetype:
mvn dependency:get -DgroupId=org.apache.maven.archetypes \
-DartifactId=maven-archetype-quickstart -Dversion=1.0
因此它将在您的本地Maven缓存中存储maven-archetype-quickstart-1.0.jar
工件。
如果您不知道本地Maven缓存的位置,可以使用Maven Help Plugin并运行:
mvn help:evaluate -Dexpression=settings.localRepository
作为详细输出的一部分,您将获得本地Maven缓存的完整路径。
由于QuickStart Archetype现在位于我们的缓存中,我们可以使用-o
标志(离线,强制)为Maven调用运行它
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.0 \
-DgroupId=com.sample -DartifactId=test -Dversion=1.0-SNAPSHOT -B -o
因此,Maven将运行离线执行并仅使用其本地缓存。
请注意,您还可以在调用archetype:generate
时使用archetypeCatalog
选项并将其设置为local
以仅检查本地目录,但强制执行到脱机模式({{1更好地满足您的需求(强制本地目录和本地缓存的原型)。
答案 1 :(得分:1)
Maven的原型机制依赖于目录。目录是maven检查的XML文件,以查看可用的原型。 正如Maven: The complete reference中 Chapter 12.4 所述:
Archetype目录是一个XML文件,Maven Archetype插件可以参考该文件来查找存储库中的原型。
您可以通过抓取本地存储库以获取可用的原型来创建缓存原型的目录(已下载)。这是通过调用crawl mojo:
mvn archetype:crawl
这将在~/.m2/repository/archetype-catalog.xml
中创建一个XML文件。
(您可以通过附加-Dcatalog=<filename>
)
创建后,您可以使用命令
mvn archetype:generate -DarchetypeCatalog=file://<fullpath of catalog file>
e.g。
mvn archetype:generate -DarchetypeCatalog=file:///home/username/.m2/repository/archetype-catalog.xml
使用新创建的目录生成项目。它将仅显示可用(缓存)原型,这些原型可以脱机使用。
附录:
我猜您会更频繁地使用 mvn archetype:generate ,因此您可能希望通过使用以下内容来最小化输入:
1)在.m2/archetype-catalog.xml
-
mvn archetype:crawl -Dcatalog=/home/<username>/.m2/archetype-catalog.xml
2)使用mvn archetype:generate -DarchetypeCatalog = local(这会访问.m2/archetype-catalog.xml
)
mvn archetype:generate -DarchetypeCatalog=local
最好在线使用一次,以便下载所有必要的插件。例如,Archetype Plugin和其他可能的人。