chr*_*hrx 5 spring maven maven-archetype
我正在尝试创建一个 Maven 原型来从预定义的模板生成多个项目。
\n\narchetype生成的模板项目是一个Spring Boot服务。以下是原型项目文件夹树的内容:
\n\nmy-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>
.
一切似乎都正常工作,除了,虽然 *.java 文件被正确命名并放置在正确的包中(并且其中的字符串也被属性值替换),但对于其他文件,替换不会发生。特别是这是以下内容src\\main\\resources\\archetype-resources\\src\\main\\resources\\bootstrap.yml
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
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}
在这两种情况下都替换变量,但它不会在生成的项目中发生。
这些是我的 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