Maven 原型不替换属性
maven archetype not replacing properties
我正在尝试创建一个 Maven 原型以从预定义模板生成多个项目。
原型生成的模板项目是一个Spring引导服务。以下是archetype项目文件夹树的内容:
my-archetype
¦ pom.xml
¦
+---src
¦ +---main
¦ ¦ +---resources
¦ ¦ +---archetype-resources
¦ ¦ ¦ ¦ mvnw
¦ ¦ ¦ ¦ mvnw.cmd
¦ ¦ ¦ ¦ pom.xml
¦ ¦ ¦ ¦ rebuild.sh
¦ ¦ ¦ ¦
¦ ¦ ¦ +---src
¦ ¦ ¦ +---main
¦ ¦ ¦ ¦ +---docker
¦ ¦ ¦ ¦ ¦ Dockerfile
¦ ¦ ¦ ¦ ¦
¦ ¦ ¦ ¦ +---java
¦ ¦ ¦ ¦ ¦ __moduleClassName__ServiceApplication.java
¦ ¦ ¦ ¦ ¦ __moduleClassName__ServiceController.java
¦ ¦ ¦ ¦ ¦
¦ ¦ ¦ ¦ +---resources
¦ ¦ ¦ ¦ application.yml
¦ ¦ ¦ ¦ bootstrap.yml
¦ ¦ ¦ ¦
¦ ¦ ¦ +---test
¦ ¦ ¦ +---java
¦ ¦ ¦ __moduleClassName__ServiceApplicationTests.java
¦ ¦ ¦
¦ ¦ +---META-INF
¦ ¦ +---maven
¦ ¦ archetype-metadata.xml
¦ ¦
...
${moduleClassName}
是一个自定义的 属性,定义为允许自定义 class 名称。我使用 mvn clean install 在我的本地存储库中安装原型,然后尝试使用 mvn archetype:generate ... -DmoduleClassName=<myModule>
.
从中创建一个项目
除了 *.java 文件被正确命名并放置在正确的包中(并且它们中的字符串也被 属性 值替换)之外,一切似乎都正常工作,对于其他文件,替换不会发生。特别是这是 src\main\resources\archetype-resources\src\main\resources\bootstrap.yml
的内容
spring:
application:
name: ${project.artifactId}
这是src\main\resources\archetype-resources\src\main\docker\Dockerfile
的内容
FROM java:8
VOLUME /tmp
ADD ${project.artifactId}.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
我希望在这两种情况下都替换 ${project.artifactId}
变量,但在生成的项目中不会发生这种情况。
这些是我的原型的相关部分-metadata.xml:
<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor ... >
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/docker</directory>
<includes>
<include>**/Dockerfile</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
</includes>
</fileSet>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/test/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
.
.
.
</fileSets>
<requiredProperties>
<requiredProperty key="moduleClassName"/>
</requiredProperties>
</archetype-descriptor>
最后我通过反复试验找到了解决方案:问题只是我对变量名使用了错误的语法,使用 ${project.artifactId}
我应该简单地写 ${artifactId}
我正在尝试创建一个 Maven 原型以从预定义模板生成多个项目。
原型生成的模板项目是一个Spring引导服务。以下是archetype项目文件夹树的内容:
my-archetype
¦ pom.xml
¦
+---src
¦ +---main
¦ ¦ +---resources
¦ ¦ +---archetype-resources
¦ ¦ ¦ ¦ mvnw
¦ ¦ ¦ ¦ mvnw.cmd
¦ ¦ ¦ ¦ pom.xml
¦ ¦ ¦ ¦ rebuild.sh
¦ ¦ ¦ ¦
¦ ¦ ¦ +---src
¦ ¦ ¦ +---main
¦ ¦ ¦ ¦ +---docker
¦ ¦ ¦ ¦ ¦ Dockerfile
¦ ¦ ¦ ¦ ¦
¦ ¦ ¦ ¦ +---java
¦ ¦ ¦ ¦ ¦ __moduleClassName__ServiceApplication.java
¦ ¦ ¦ ¦ ¦ __moduleClassName__ServiceController.java
¦ ¦ ¦ ¦ ¦
¦ ¦ ¦ ¦ +---resources
¦ ¦ ¦ ¦ application.yml
¦ ¦ ¦ ¦ bootstrap.yml
¦ ¦ ¦ ¦
¦ ¦ ¦ +---test
¦ ¦ ¦ +---java
¦ ¦ ¦ __moduleClassName__ServiceApplicationTests.java
¦ ¦ ¦
¦ ¦ +---META-INF
¦ ¦ +---maven
¦ ¦ archetype-metadata.xml
¦ ¦
...
${moduleClassName}
是一个自定义的 属性,定义为允许自定义 class 名称。我使用 mvn clean install 在我的本地存储库中安装原型,然后尝试使用 mvn archetype:generate ... -DmoduleClassName=<myModule>
.
除了 *.java 文件被正确命名并放置在正确的包中(并且它们中的字符串也被 属性 值替换)之外,一切似乎都正常工作,对于其他文件,替换不会发生。特别是这是 src\main\resources\archetype-resources\src\main\resources\bootstrap.yml
spring:
application:
name: ${project.artifactId}
这是src\main\resources\archetype-resources\src\main\docker\Dockerfile
FROM java:8
VOLUME /tmp
ADD ${project.artifactId}.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
我希望在这两种情况下都替换 ${project.artifactId}
变量,但在生成的项目中不会发生这种情况。
这些是我的原型的相关部分-metadata.xml:
<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor ... >
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/docker</directory>
<includes>
<include>**/Dockerfile</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
</includes>
</fileSet>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/test/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
.
.
.
</fileSets>
<requiredProperties>
<requiredProperty key="moduleClassName"/>
</requiredProperties>
</archetype-descriptor>
最后我通过反复试验找到了解决方案:问题只是我对变量名使用了错误的语法,使用 ${project.artifactId}
我应该简单地写 ${artifactId}