Java и Maven генерируют и используют мой собственный архетип - PullRequest
0 голосов
/ 29 марта 2010

Я был занят в своем проекте созданием веб-приложения (в структурах), которое управляет maven, используя maven-2.2.1-uber.jar текст ссылки . Проблема возникает, когда начальник говорит, что ему нужно использовать некоторые архетипы, которые компания создала (поэтому никаких предопределенных архетипов для вашего непослушного мальчика нет!). Итак, я использую опцию -DarchetypeRepository (с ServletWrapper я получаю полное руководство по работе в Интернете, потому что репозиторий будет внутри приложения), и журнал, кажется, находит его, но тогда сборка завершается неудачей - с сожалением - с этим небольшим текстом » Ошибка сборки - определенный артефакт не является таким простым архетипом. Конечно, у меня есть много строк ИНФО, которые говорят абсолютно ничего не связанные. Я прочитал подробное руководство maven в поисках какой-то помощи, но в лучшем случае оно разочаровало.

Я думаю, что, может быть, где-то во всем дереве папок мне не хватает некоторого xml, который на самом деле говорит, что мой pom.xml - это архетип, а не проект. Но я действительно, действительно, не могу найти ничего в сети или в руководствах, которые бы объясняли простым способом, как работает архетип: генерировать (со специальными параметрами) и где я должен поместить каждую папку и / или файл.

Итак, просто чтобы высказать свои мысли вслух (и, надеюсь, вы понимаете, что я пытаюсь спросить): у меня есть шаблон, в котором я делаю некоторые изменения в XML (переменные и т. Д.), Затем я должен вызвать maen и сделать архетип: генерировать с переменным проектом. Кажется, проблема в том, что моей реальной конфигурации не нравится то, что я делаю. После создания архетипа, к счастью, Witch создаст несколько деревьев каталогов и оставит мне POM.xml где-нибудь, мне все еще нужно будет сделать некоторые изменения переменных и больше вещей, связанных с управлением XML, так что было бы очень любезно от maven ничего не разрушать в этом процессе.

Есть какие-нибудь идеи, почему эта чудовищная вещь не всегда счастлива, если предположить, что мой архетип определенно является архетипом? В общем, я думаю, что код в порядке, он может быть неправильным, так как я использую maven-ubber и вызываю фактический CSMavenCli.main (String [, ClassWorld), я не думаю, что на этот раз это так.

Спасибо и все! :)

Random.

Ответы [ 3 ]

1 голос
/ 30 марта 2010

Прежде всего, спасибо за ответ:)

Сегодня я пытаюсь лучше понять, как работают архетипы, взглянув на учебник по maven здесь , хотя все еще очень разочаровывает.

Моя проблема в том, что у меня возникает ошибка сборки в maven, когда я пытаюсь выполнить команду mvn archetype: generate. Это как можно проще моя проблема. Проблема сборки говорит о том, что «определенный артефакт не является архетипом».

Я попробовал архетип обезглавленной инструкции: создать, и ошибка более или менее одинакова, но добавляет, что «Встроенная ошибка: невозможно найти дескриптор META-INF / maven / archetype.xml». В моем архетипе есть archetype.xml, так что кажется, что утерянная инструкция является десятинной по уважительной причине.

Моя общая инструкция:

mvn archetype:generate
-DgroupId=my_groupid
-DartifactId=my_artifactid
-Dversion=1.0
-DarchetypeGroupId=archetype-foo-lib
-DarchetypeArtifactId=my.archetype.foo
-DarchetypeVersion=1.0
-DarchetypeRepository=C:/.m2/repository
-Dbasedir=C:/.m2/repository/archetype-foo-lib
-B
-DinteractiveMode=false

В basedir у меня есть pom.xml и dom4j.jar, а хранилище запущено (на небольшом сервере tomcat). Кроме того, установлен архетип, а archetypegroupid, archetypeartifacid и archetypeversion такие же, как в папке src \ main \ resources \ archetype-resources. Я также попытался изменить косые черты на '\' в basedir (на всякий случай), но безрезультатнее.

Поскольку я сейчас пытаюсь сделать это прямо в консоли maven, вы можете забыть о проекте веб-приложения и обо всем этом. Надеюсь, я смогу заставить его работать там, как только он начнет работать в консоли.

Увы! Также у меня есть трассировка стека (как я это сделал с параметром -e)

+ Error stacktraces are turned on.
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO]    task-segment: [archetype:generate] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] Preparing archetype:generate
[INFO] No goals needed for project - skipping
[INFO] Setting property: classpath.resource.loader.class => 'org.codehaus.plexus
.velocity.ContextClassLoaderResourceLoader'.
[INFO] Setting property: velocimacro.messages.on => 'false'.
[INFO] Setting property: resource.loader => 'classpath'.
[INFO] Setting property: resource.manager.logwhenfound => 'false'.
[INFO] [archetype:generate {execution: default-cli}]
[INFO] Generating project in Batch mode
[INFO] Archetype defined by properties
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] The defined artifact is not an archetype
[INFO] ------------------------------------------------------------------------
[INFO] Trace
org.apache.maven.BuildFailureException: The defined artifact is not an archetype

at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(Defa
ultLifecycleExecutor.java:715)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandalone
Goal(DefaultLifecycleExecutor.java:569)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(Defau
ltLifecycleExecutor.java:539)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHan
dleFailures(DefaultLifecycleExecutor.java:387)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegmen
ts(DefaultLifecycleExecutor.java:284)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLi
fecycleExecutor.java:180)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:6
0)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
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)
Caused by: org.apache.maven.plugin.MojoFailureException: The defined artifact is
not an archetype
at org.apache.maven.archetype.mojos.CreateProjectFromArchetypeMojo.execu
te(CreateProjectFromArchetypeMojo.java:201)
at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPlugi
nManager.java:490)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(Defa
ultLifecycleExecutor.java:694)
... 17 more
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Tue Mar 30 11:08:59 CEST 2010
[INFO] Final Memory: 8M/15M
[INFO] ------------------------------------------------------------------------

Поскольку репозиторий может быть плохим, я также изменил репозиторий -Darchetype на c: .m2 \ repository, но он также не может выполнить что-то другое.

Надеюсь, этот пост более проницательный.

Спасибо всем :) Случайная

Редактировать: ОК, новые данные. Я знаю, как исследовать, почему он не является архетипом, и кажется, что у mvn archetype: generate -DarchetypeCatalog = local есть 0 архетипов. Похоже, он не установлен. Я выполнил установку mvn и архетип mvn: crawl, но он не работает. Есть идеи, почему он не позволяет мне устанавливать мои собственные архетипы? Еще раз спасибо:)

Снова отредактируйте: проблема с локальными архетипами решена, мне пришлось переместить archetype-catalog.xml из ~ / .m2 / repository / в ~ / .m2 /, а затем точно так же, как Maven нашел мои локальные архетипы. Странно все, это все равно выдает мне ту же ошибку. Я также изменил свой архетип-репозиторий и базовый каталог.

Последнее редактирование (я надеюсь на это!): Ну, наконец-то я нашел ошибку. Это так глупо, что я чувствую, что мне стыдно записать это (прошло три дня, потому что я знал об этом). Мой archetypeArtifactId и мой archetypeGroupId были обменены (я имею в виду, один был другим). Как только я начал передавать параметры исправления (определенные в archetype-catalog.xml, которые, тем не менее, мне все еще приходилось перемещать в правильное место), он начал творить чудеса. Спасибо тоже всем peoplo, кто читал или писал:)

1 голос
/ 30 марта 2010

Но я действительно, действительно, не могу найти что-либо в сети или в руководствах, которые объясняют простым способом, как работает архетип: генерировать (со специальными параметрами) и где я должен поместить каждую папку и / или файл.

Лучше всего было бы посмотреть на источники существующих архетипов ИМХО, в идеале что-то близкое к тому, что вы делаете.

Есть какие-нибудь идеи, почему эта чудовищная вещь не всегда счастлива, если предположить, что мой архетип определенно является архетипом?

Честно говоря, я не уверен, что понял, что вы делаете, нет, не знаю.

0 голосов
/ 30 марта 2010

Вот предположение ... сообщение:
«Ошибка сборки - определенный артефакт не является архетипом», описывает проблему.

Я подозреваю, что то, что сборка maven получает от вашего веб-приложения, не является архетипом.
Попробуйте указать в своем браузере URL-адрес архетипа, который отображается в вашем веб-приложении, он должен выглядеть примерно так: this

Если этого не произойдет, убедитесь, что ваше веб-приложение не пытается обработать полученный XML-код как шаблон представления и что XML-поток передается в HttpResponse с правильным mime-типом.
Также убедитесь, что ресурс архетипа не защищен определениями безопасности в вашем файле web.xml.

...