Maven 原型不替换属性

chr*_*hrx 5 spring maven maven-archetype

我正在尝试创建一个 Maven 原型来从预定义的模板生成多个项目。

\n\n

archetype生成的模板项目是一个Spring Boot服务。以下是原型项目文件夹树的内容:

\n\n
my-archetype\n\xc2\xa6   pom.xml\n\xc2\xa6\n+---src\n\xc2\xa6   +---main\n\xc2\xa6   \xc2\xa6   +---resources\n\xc2\xa6   \xc2\xa6       +---archetype-resources\n\xc2\xa6   \xc2\xa6       \xc2\xa6   \xc2\xa6   mvnw\n\xc2\xa6   \xc2\xa6       \xc2\xa6   \xc2\xa6   mvnw.cmd\n\xc2\xa6   \xc2\xa6       \xc2\xa6   \xc2\xa6   pom.xml\n\xc2\xa6   \xc2\xa6       \xc2\xa6   \xc2\xa6   rebuild.sh\n\xc2\xa6   \xc2\xa6       \xc2\xa6   \xc2\xa6\n\xc2\xa6   \xc2\xa6       \xc2\xa6   +---src\n\xc2\xa6   \xc2\xa6       \xc2\xa6       +---main\n\xc2\xa6   \xc2\xa6       \xc2\xa6       \xc2\xa6   +---docker\n\xc2\xa6   \xc2\xa6       \xc2\xa6       \xc2\xa6   \xc2\xa6       Dockerfile\n\xc2\xa6   \xc2\xa6       \xc2\xa6       \xc2\xa6   \xc2\xa6\n\xc2\xa6   \xc2\xa6       \xc2\xa6       \xc2\xa6   +---java\n\xc2\xa6   \xc2\xa6       \xc2\xa6       \xc2\xa6   \xc2\xa6       __moduleClassName__ServiceApplication.java\n\xc2\xa6   \xc2\xa6       \xc2\xa6       \xc2\xa6   \xc2\xa6       __moduleClassName__ServiceController.java\n\xc2\xa6   \xc2\xa6       \xc2\xa6       \xc2\xa6   \xc2\xa6\n\xc2\xa6   \xc2\xa6       \xc2\xa6       \xc2\xa6   +---resources\n\xc2\xa6   \xc2\xa6       \xc2\xa6       \xc2\xa6           application.yml\n\xc2\xa6   \xc2\xa6       \xc2\xa6       \xc2\xa6           bootstrap.yml\n\xc2\xa6   \xc2\xa6       \xc2\xa6       \xc2\xa6\n\xc2\xa6   \xc2\xa6       \xc2\xa6       +---test\n\xc2\xa6   \xc2\xa6       \xc2\xa6           +---java\n\xc2\xa6   \xc2\xa6       \xc2\xa6                   __moduleClassName__ServiceApplicationTests.java\n\xc2\xa6   \xc2\xa6       \xc2\xa6\n\xc2\xa6   \xc2\xa6       +---META-INF\n\xc2\xa6   \xc2\xa6           +---maven\n\xc2\xa6   \xc2\xa6                   archetype-metadata.xml\n\xc2\xa6   \xc2\xa6\n...\n
Run Code Online (Sandbox Code Playgroud)\n\n

${moduleClassName}是定义为允许自定义类名的自定义属性。我使用 mvn clean install 在本地存储库中安装原型,然后尝试使用mvn archetype:generate ... -DmoduleClassName=<myModule>.

\n\n

一切似乎都正常工作,除了,虽然 *.java 文件被正确命名并放置在正确的包中(并且其中的字符串也被属性值替换),但对于其他文件,替换不会发生。特别是这是以下内容src\\main\\resources\\archetype-resources\\src\\main\\resources\\bootstrap.yml

\n\n
spring:\n    application:\n        name: ${project.artifactId}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是内容src\\main\\resources\\archetype-resources\\src\\main\\docker\\Dockerfile

\n\n
FROM java:8\nVOLUME /tmp\nADD ${project.artifactId}.jar app.jar\nRUN bash -c \'touch /app.jar\'\nENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想要${project.artifactId}在这两种情况下都替换变量,但它不会在生成的项目中发生。

\n\n

这些是我的 archetype-metadata.xml 的相关部分:

\n\n
<?xml version="1.0" encoding="UTF-8"?>\n<archetype-descriptor ... >\n  <fileSets>\n    <fileSet filtered="true" packaged="true" encoding="UTF-8">\n      <directory>src/main/java</directory>\n      <includes>\n        <include>**/*.java</include>\n      </includes>\n    </fileSet>\n    <fileSet filtered="true" encoding="UTF-8">\n      <directory>src/main/docker</directory>\n      <includes>\n        <include>**/Dockerfile</include>\n      </includes>\n    </fileSet>\n    <fileSet filtered="true" encoding="UTF-8">\n      <directory>src/main/resources</directory>\n      <includes>\n        <include>**/*.yml</include>\n      </includes>\n    </fileSet>\n    <fileSet filtered="true" packaged="true" encoding="UTF-8">\n      <directory>src/test/java</directory>\n      <includes>\n        <include>**/*.java</include>\n      </includes>\n    </fileSet>\n    .\n    .\n    .\n  </fileSets>\n  <requiredProperties>\n      <requiredProperty key="moduleClassName"/>\n  </requiredProperties>\n</archetype-descriptor>\n
Run Code Online (Sandbox Code Playgroud)\n

chr*_*hrx 3

最后我通过反复试验找到了解决方案:问题只是我对变量名使用了错误的语法,使用了${project.artifactId}我应该简单编写的地方${artifactId}