当前位置: 首页 > 面试题库 >

模板化Maven原型

郁吉星
2023-03-14
问题内容

我正在创建自己的Maven原型,这是我使用的项目的通用模板。

在该模板中,我有许多“ exec-maven-plugin”块,实际上每个项目都不同,这意味着在一个项目中,我可能有2个“ exec-maven-
plugin”块,而在另一个项目中,我可能有3个或更多。

我希望当他使用我创建的原型创建项目时,由用户来驱动。例如,将要求用户提供许多主要类别,并根据他选择输入的主要类别,应创建许多“ exec-maven-
plugin”块。

例如,如果要求用户提供他将要输入的主要类,则可以输入: com.domain.MyFirstMain,com.domainMySecondMain
因此,maven pom.xml的外观应类似于以下内容:

<profiles>
    <profile>
        <id>Main1</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <configuration>
                        <executable>java</executable>
                        <arguments>
                            <argument>com.domain.MyFirstMain</argument>
                        </arguments>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
    <profile>
        <id>Main2</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <configuration>
                        <executable>java</executable>
                        <arguments>
                            <argument>com.domain.MySecondMain</argument>
                        </arguments>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

有谁知道我在创建Maven原型时是否可以实现这一目标,或者唯一的方法就是让用户在pom.xml中添加所需的块?

谢谢。


问题答案:

应该可以做您想做的事。当将原型文件复制到新项目时,Maven使用Apache
Velocity
处理原型文件。我已经成功完成了类似的工作,例如,提示原型用户输入参数“ useSomeFeature”,并在响应以“ Y”或“
y”开头的情况下添加插件执行。

我的用例基于布尔回复添加了文本;您的用例需要一个for循环。它看起来像这样。注意,这是未经测试的代码,我将其交给您以使语法完全正确,添加任何所需的错误处理并使之正常工作。:)无论如何,你有主意。

## archetype-resources/pom.xml
## assumes the template variable holding the main class list is mainClassAnswer
#set( $mainClasses = $mainClassAnswer.split(","))

.... basic POM elements here ....

<profiles>
#set ( $loopCount = 0 )
#foreach( $mainClass in $mainClasses )
  #set ( $trimmedMainClass = $mainClass.trim() )
  #set ( $loopCount = $loopCount + 1 )
  <profile>
      <id>Main${loopCount}</id>
      <build>
          <plugins>
              <plugin>
                  <groupId>org.codehaus.mojo</groupId>
                  <artifactId>exec-maven-plugin</artifactId>
                  <configuration>
                      <executable>java</executable>
                      <arguments>
                          <argument>${trimmedMainClass}</argument>
                      </arguments>
                  </configuration>
              </plugin>
          </plugins>
      </build>
  </profile>
#end
</profiles>
.... rest of POM here ....


 类似资料:
  • 原生 PHP 模板就是指直接用 PHP 来写模板,这是很自然的选择,因为 PHP 本身其实是个模板语言。这代表你可以在其他的语言中结合 PHP 使用,比如 HTML 。这对 PHP 开发者相当有利,因为不需要额外学习新的语法,他们熟知可以使用的函数,并且使用的编辑器也已经内置了语法高亮和自动补全。此外,原生的 PHP 模板没有了编译阶段,速度会更快。 现今的 PHP 框架都会使用一些模板系统,这当

  • 还尝试在专门化的中进行模板方法专门化: 这一次它编译,但调用原始方法,即 解决方案

  • 我试图在类型s. t上专门化一个类。它忽略了给定类型的恒定性。在这种情况下,该类型是一个模板模板参数: 上面的代码在GCC 4.8.4和clang 5.0(with-std=c 11)中都抱怨bar在与匹配FOFType模板参数化的类一起使用时未定义。即使我删除了sfinae参数,仍然无法找到特化。 这个问题的一个例子可以在这里找到:https://godbolt.org/g/Cjci9C.在上面

  • 问题内容: 这是我的代码: 它运作良好。但是当我尝试添加这个 我遇到编译器错误:«int MyClass :: DoSomething()»的«>»令牌模板标识«DoSomething <0>»之前的无效显式专门化与任何模板声明都不匹配 我使用g ++ 4.6.1应该怎么做? 问题答案: 不幸的是,如果不对外部模板进行特殊化处理,就不能对作为类模板成员的模板进行特殊处理: C ++ 11 14.7

  • 这有什么问题: 我在这里尝试过:用不同的编译器https://godbolt.org/z/NkL44s: x86-64 gcc 9.2:编译 x86-64 gcc(主干):失败 x86-64 clang 6.0.0:编译 x86-64 clang 7.0.0及更高版本:失败 x64 msvc v19.22:编译 x64 msvc v19.23(内部测试):失败 那么,为什么最近的编译器会拒绝这一点

  • 这是我在玩变量模板时遇到的一个问题。我有一些代码,使用专业化来计算参数包中的“有趣”类型,就像这样: 这段代码工作正常,但是如果我想使用相同的方法来计算类模板,我会遇到问题: 上面的代码编译失败,错误是"预期的类型,得到了'向量'"开始的行"结构计数"。我也无法更简单的东西,所有的类模板接受一个参数: 这段代码也无法编译,再次在以“结构计数”开头的行中抱怨“预期的类型,得到了‘_First’”。有