Appengine Maven Plugin - Endpoints Purpose is to enable filtering of .discovery files
Following this tutorial , I have implemented Google Cloud endpoints in my Maven project
Here are the properties of my pom.xml
<properties>
<appengine.app.id>xxxxxxxx</appengine.app.id>
</properties>
Here is my maven-war-plugin config in pom.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<!-- http://maven.apache.org/plugins/maven-war-plugin/examples/adding-filtering-webresources.html -->
<!-- To prevent corrupting your binary files when filtering is enabled, you can configure a list of file extensions that will not be filtered. -->
<nonFilteredFileExtensions>
<nonFilteredFileExtension>p12</nonFilteredFileExtension>
</nonFilteredFileExtensions>
<archiveClasses>true</archiveClasses>
<!-- https://cloud.google.com/appengine/docs/java/tools/maven#cloud_endpoints_goals -->
<webXml>${project.build.directory}/generated-sources/appengine-endpoints/WEB-INF/web.xml</webXml>
<webResources>
<!-- in order to interpolate version from pom into appengine-web.xml -->
<resource>
<directory>${basedir}/src/main/webapp/WEB-INF</directory>
<filtering>true</filtering>
<targetPath>WEB-INF</targetPath>
</resource>
<resource>
<directory>${project.build.directory}/generated-sources/appengine-endpoints</directory>
<includes>
<include>WEB-INF/*.discovery</include>
<include>WEB-INF/*.api</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
Here is the chapter of my appengine-web.xml file
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>${appengine.app.id}</application>
<version>${project.version}</version>
....
</appengine-web-app>
Here is the generated data
Problem .discovery files do not resolve maven property during their creation.
MyStore-V1-rest.discovery
"protocol": "rest",
"baseUrl": "https://${appengine.app.id}.appspot.com/_ah/api/mystore/v1/",
"basePath": "/_ah/api/mystore/v1/",
"rootUrl": "https://${appengine.app.id}.appspot.com/_ah/api/",
"servicePath": "mystore/v1/",
MyStore-V1-rpc.discovery
protocol": "rpc",
"rootUrl": "https://${appengine.app.id}.appspot.com/_ah/api/",
"rpcUrl": "https://${appengine.app.id}.appspot.com/_ah/api/rpc",
"rpcPath": "/_ah/api/rpc",
Why aren't these files filtered like any other file saved in the WEB-INF folder?
I am using Maven variables in many files (in the parent WEB-INF folder) and the values ββare replaced without issue.
How can I tweak my config to allow filtering on .discovery files too?
I think that (during lib generation) the value application
from appengine-web.xml is accepted without value resolution, and no filtering is applied during Maven build.
I already tried to add <filtering>true</filtering>
to the resource config, with no success
--- EDIT 25/01/2014 ---
After some suggestions received, I need to clarify what I forgot to write in the original post.
The problem is related to endpoints_get_discovery_doc
Here is the Maven Goal log
API Discovery Document written to ..\target\generated-sources\appengine-endpoints\WEB-INF/mystore-v3-rpc.discovery
API Discovery Document written to ..\target\generated-sources\appengine-endpoints\WEB-INF/mystore-androidtest-rpc.discovery
The file is \target\generated-sources\appengine-endpoints\WEB-INF/mystore-v3-rpc.discovery
generated by the target endpoint and is not filtered.
Even with filtering property
<resource>
<directory>${project.build.directory}/generated-sources/appengine-endpoints</directory>
<filtering>true</filtering>
<includes>
<include>WEB-INF/*.discovery</include>
<include>WEB-INF/*.api</include>
</includes>
</resource>
The generated files are not filtered.
Maybe the problem is that if the files are written directly to the folder ${project.build.directory}/generated-sources/appengine-endpoints
, the files are not filtered?
source to share
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<webXml>${project.build.directory}/generated-sources/appengine-endpoints/WEB-INF/web.xml</webXml>
<webResources>
<!-- in order to interpolate version from pom into appengine-web.xml -->
<resource>
<directory>${basedir}/src/main/webapp/WEB-INF</directory>
<filtering>true</filtering>
<targetPath>WEB-INF</targetPath>
</resource>
<resource>
<!-- this is relative to the pom.xml directory -->
<directory>${project.build.directory}/generated-sources/appengine-endpoints</directory>
<!-- the list has a default value of ** -->
<includes>
<include>WEB-INF/*.discovery</include>
<include>WEB-INF/*.api</include>
</includes>
<filtering>true</filtering>
</resource>
</webResources>
</configuration>
</plugin>
source to share
<!--User the below Line, I also had the same problem that I solved using Note: <version>${app.version}</version><appId>${app.id}</appId> folow as per your configuration --!>
<plugin>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>${appengine.version}</version>
<configuration>
<enableJarClasses>false</enableJarClasses>
<version>${app.version}</version>
<appId>${app.id}</appId>
<!-- Comment in the below snippet to bind to all IPs instead of just localhost -->
<address>0.0.0.0</address>
<port>8080</port>
<!-- Comment in the below snippet to enable local debugging with a remote debugger
like those included with Eclipse or IntelliJ -->
<jvmFlags>
<jvmFlag>-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n</jvmFlag>
</jvmFlags>
</configuration>
<executions>
<execution>
<goals>
<goal>endpoints_get_discovery_doc</goal>
</goals>
</execution>
</executions>
</plugin>
source to share