aboutsummaryrefslogtreecommitdiff
path: root/pom.xml
blob: b75c97907dad9cbdf59b7c61d83b71a0d48dc87f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.google.code.gson</groupId>
  <artifactId>gson-parent</artifactId>
  <version>2.10.1</version>
  <packaging>pom</packaging>

  <name>Gson Parent</name>
  <description>Gson JSON library</description>
  <url>https://github.com/google/gson</url>

  <modules>
    <module>gson</module>
    <module>extras</module>
    <module>metrics</module>
    <module>proto</module>
  </modules>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.release>7</maven.compiler.release>
  </properties>

  <scm>
    <url>https://github.com/google/gson/</url>
    <connection>scm:git:https://github.com/google/gson.git</connection>
    <developerConnection>scm:git:git@github.com:google/gson.git</developerConnection>
    <tag>gson-parent-2.10.1</tag>
  </scm>

  <developers>
    <developer>
      <id>google</id>
      <organization>Google</organization>
      <organizationUrl>https://www.google.com</organizationUrl>
    </developer>
  </developers>

  <issueManagement>
    <system>GitHub Issues</system>
    <url>https://github.com/google/gson/issues</url>
  </issueManagement>

  <licenses>
    <license>
      <name>Apache-2.0</name>
      <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
    </license>
  </licenses>

  <distributionManagement>
    <repository>
      <id>sonatype-nexus-staging</id>
      <name>Nexus Release Repository</name>
      <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
    </repository>
  </distributionManagement>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.10.1</version>
          <configuration>
            <showWarnings>true</showWarnings>
            <showDeprecation>true</showDeprecation>
            <failOnWarning>true</failOnWarning>
            <compilerArgs>
              <!-- Enable all warnings, except for ones which cause issues when building with newer JDKs, see also
                https://docs.oracle.com/en/java/javase/11/tools/javac.html -->
              <compilerArg>-Xlint:all,-options</compilerArg>
            </compilerArgs>
            <jdkToolchain>
              <version>[11,)</version>
            </jdkToolchain>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>3.4.1</version>
          <configuration>
            <jdkToolchain>
              <version>[11,)</version>
            </jdkToolchain>
            <!-- Specify newer JDK as target to allow linking to newer Java API, and to generate
              module overview in Javadoc for Gson's module descriptor -->
            <release>11</release>
            <!-- Exclude `missing` group because some tags have been omitted when they are redundant -->
            <doclint>all,-missing</doclint>
            <!-- Link against newer Java API Javadoc because most users likely 
              use a newer Java version than the one used for building this project -->
            <detectJavaApiLink>false</detectJavaApiLink>
            <links>
              <link>https://docs.oracle.com/en/java/javase/11/docs/api/</link>
            </links>
            <!-- Disable detection of offline links between Maven modules: 
              (1) Only `gson` module is published, so for other modules Javadoc links don't 
              matter much at the moment; (2) The derived URL for the modules is based on 
              the project URL (= Gson GitHub repo) which is incorrect because it is not 
              hosting the Javadoc (3) It might fail due to https://bugs.openjdk.java.net/browse/JDK-8212233 -->
            <detectOfflineLinks>false</detectOfflineLinks>
            <!-- Only show warnings and errors -->
            <quiet>true</quiet>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.3.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-source-plugin</artifactId>
          <version>3.2.1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-gpg-plugin</artifactId>
          <version>3.0.1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-release-plugin</artifactId>
          <version>3.0.0-M7</version>
          <configuration>
            <autoVersionSubmodules>true</autoVersionSubmodules>
            <!-- Disable Maven Super POM release profile and instead use own one -->
            <useReleaseProfile>false</useReleaseProfile>
            <releaseProfiles>release</releaseProfiles>
            <!-- Run custom goals to replace version references, see plugin configuration below -->
            <!-- Also run `verify` to make sure tests still pass with new version number;
              also seems to be necessary because without `package`, goals fail for modules depending
              on each other; possibly same issue as https://issues.apache.org/jira/browse/MRELEASE-271 -->
            <preparationGoals>
              clean verify
              antrun:run@replace-version-placeholders
              antrun:run@replace-old-version-references
              antrun:run@git-add-changed
            </preparationGoals>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>3.1.0</version>
          <executions>
            <!-- Replaces version placeholders with the current version; this is mainly useful for
              Javadoc where this allows writing `@since $next-version$` -->
            <execution>
              <id>replace-version-placeholders</id>
              <goals>
                <goal>run</goal>
              </goals>
              <configuration>
                <target>
                  <replace token="$next-version$" value="${project.version}" encoding="${project.build.sourceEncoding}">
                    <!-- erroronmissingdir=false for gson-parent which does not have source directory -->
                    <fileset dir="${project.build.sourceDirectory}" includes="**" erroronmissingdir="false" />
                  </replace>
                </target>
              </configuration>
            </execution>
            <!-- Replaces references to the old version in the documentation -->
            <execution>
              <id>replace-old-version-references</id>
              <goals>
                <goal>run</goal>
              </goals>
              <configuration>
                <target>
                  <!-- Replace Maven and Gradle version references; uses regex lookbehind and lookahead -->
                  <replaceregexp match="(?&lt;=&lt;version&gt;).*(?=&lt;/version&gt;)|(?&lt;='com\.google\.code\.gson:gson:).*(?=')" flags="g" replace="${project.version}" encoding="${project.build.sourceEncoding}">
                    <fileset dir="${project.basedir}">
                      <include name="README.md" />
                      <include name="UserGuide.md" />
                    </fileset>
                  </replaceregexp>
                </target>
              </configuration>
              <!-- Only has to be executed for parent project; don't inherit this to modules -->
              <!-- This might be a bit hacky; execution with this ID seems to be missing for modules and Maven just executes default
                configuration which does not have any targets configured. (not sure if this behavior is guaranteed) -->
              <inherited>false</inherited>
            </execution>
            <!-- Adds changed files to the Git index; workaround because Maven Release Plugin does not support committing
              additional files yet (https://issues.apache.org/jira/browse/MRELEASE-798), and for workarounds with
              Maven SCM Plugin it is apparently necessary to know modified files in advance -->
            <!-- Maven Release Plugin then just happens to include these changed files in its Git commit;
              not sure if this behavior is guaranteed or if this relies on implementation details -->
            <execution>
              <id>git-add-changed</id>
              <goals>
                <goal>run</goal>
              </goals>
              <configuration>
                <target>
                  <exec executable="git" dir="${project.basedir}" failonerror="true">
                    <arg value="add" />
                    <!-- Don't add (unrelated) not yet tracked files -->
                    <arg value="--update" />
                    <arg value="." />
                  </exec>
                </target>
              </configuration>
            </execution>
          </executions>
        </plugin>
        <!-- Plugin for checking source and binary compatibility; used by GitHub workflow -->
        <plugin>
          <groupId>com.github.siom79.japicmp</groupId>
          <artifactId>japicmp-maven-plugin</artifactId>
          <version>0.17.1</version>
          <configuration>
            <oldVersion>
              <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>${project.artifactId}</artifactId>
                <!-- This is set by the GitHub workflow -->
                <version>JAPICMP-OLD</version>
              </dependency>
            </oldVersion>
            <newVersion>
              <file>
                <path>${project.build.directory}/${project.build.finalName}.${project.packaging}</path>
              </file>
            </newVersion>
            <parameter>
              <breakBuildOnSourceIncompatibleModifications>true</breakBuildOnSourceIncompatibleModifications>
              <breakBuildOnBinaryIncompatibleModifications>true</breakBuildOnBinaryIncompatibleModifications>
              <excludes>
                <exclude>com.google.gson.internal</exclude>
              </excludes>
              <onlyModified>true</onlyModified>
              <skipXmlReport>true</skipXmlReport>
              <reportOnlyFilename>true</reportOnlyFilename>
            </parameter>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

  <profiles>
    <!-- Profile defining additional plugins to be executed for release -->
    <profile>
      <id>release</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-sources</id>
                <goals>
                  <goal>jar-no-fork</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-javadocs</id>
                <goals>
                  <goal>jar</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-gpg-plugin</artifactId>
            <executions>
              <execution>
                <id>sign-artifacts</id>
                <phase>verify</phase>
                <goals>
                  <goal>sign</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>