[
https://issues.apache.org/jira/browse/MPMD-395?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17852708#comment-17852708
]
ASF GitHub Bot commented on MPMD-395:
-------------------------------------
michael-o commented on code in PR #150:
URL: https://github.com/apache/maven-pmd-plugin/pull/150#discussion_r1629162067
##########
src/test/java/org/apache/maven/plugins/pmd/CpdReportTest.java:
##########
@@ -130,7 +130,8 @@ public void testInvalidFormat() throws Exception {
fail("MavenReportException must be thrown");
} catch (Exception e) {
- assertTrue(true);
+ assertMavenReportException("There were 1 errors while executing
CPD", e);
Review Comment:
Can we make that better for singular and plural...
##########
src/main/java/org/apache/maven/plugins/pmd/exec/CpdReportConsumer.java:
##########
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.plugins.pmd.exec;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.util.function.Consumer;
+import java.util.function.Predicate;
+
+import net.sourceforge.pmd.cpd.CPDReport;
+import net.sourceforge.pmd.cpd.CPDReportRenderer;
+import net.sourceforge.pmd.cpd.Match;
+import net.sourceforge.pmd.cpd.XMLRenderer;
+import org.apache.maven.plugins.pmd.ExcludeDuplicationsFromFile;
+import org.apache.maven.reporting.MavenReportException;
+import org.codehaus.plexus.util.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+class CpdReportConsumer implements Consumer<CPDReport> {
+ private static final Logger LOG =
LoggerFactory.getLogger(CpdReportConsumer.class);
+
+ private final CpdRequest request;
+ private final ExcludeDuplicationsFromFile excludeDuplicationsFromFile;
+
+ CpdReportConsumer(CpdRequest request, ExcludeDuplicationsFromFile
excludeDuplicationsFromFile) {
+ this.request = request;
+ this.excludeDuplicationsFromFile = excludeDuplicationsFromFile;
+ }
+
+ @Override
+ public void accept(CPDReport report) {
+ try {
+ // always create XML format. we need to output it even if the file
list is empty or we have no
+ // duplications so that the "check" goals can check for violations
+ writeXmlReport(report);
+
+ // HTML format is handled by maven site report, XML format has
already been rendered.
+ // a renderer is only needed for other formats
+ String format = request.getFormat();
+ if (!"html".equals(format) && !"xml".equals(format)) {
+ writeFormattedReport(report);
+ }
+ } catch (IOException | MavenReportException e) {
+ // Exceptions happening during this consumer are logged by PMD
+ // through the CPDConfiguration's reporter.
Review Comment:
Where? I don't see it.
##########
src/main/java/org/apache/maven/plugins/pmd/exec/CpdReportConsumer.java:
##########
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.plugins.pmd.exec;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.util.function.Consumer;
+import java.util.function.Predicate;
+
+import net.sourceforge.pmd.cpd.CPDReport;
+import net.sourceforge.pmd.cpd.CPDReportRenderer;
+import net.sourceforge.pmd.cpd.Match;
+import net.sourceforge.pmd.cpd.XMLRenderer;
+import org.apache.maven.plugins.pmd.ExcludeDuplicationsFromFile;
+import org.apache.maven.reporting.MavenReportException;
+import org.codehaus.plexus.util.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+class CpdReportConsumer implements Consumer<CPDReport> {
+ private static final Logger LOG =
LoggerFactory.getLogger(CpdReportConsumer.class);
+
+ private final CpdRequest request;
+ private final ExcludeDuplicationsFromFile excludeDuplicationsFromFile;
+
+ CpdReportConsumer(CpdRequest request, ExcludeDuplicationsFromFile
excludeDuplicationsFromFile) {
+ this.request = request;
+ this.excludeDuplicationsFromFile = excludeDuplicationsFromFile;
+ }
+
+ @Override
+ public void accept(CPDReport report) {
+ try {
+ // always create XML format. we need to output it even if the file
list is empty or we have no
+ // duplications so that the "check" goals can check for violations
+ writeXmlReport(report);
+
+ // HTML format is handled by maven site report, XML format has
already been rendered.
+ // a renderer is only needed for other formats
+ String format = request.getFormat();
+ if (!"html".equals(format) && !"xml".equals(format)) {
+ writeFormattedReport(report);
+ }
+ } catch (IOException | MavenReportException e) {
+ // Exceptions happening during this consumer are logged by PMD
+ // through the CPDConfiguration's reporter.
+ throw new RuntimeException(e);
+ }
+ }
+
+ private void writeXmlReport(CPDReport cpd) throws IOException {
+ File targetFile = writeReport(cpd, new
XMLRenderer(request.getOutputEncoding()), "xml");
+ if (request.isIncludeXmlInSite()) {
+ File siteDir = new File(request.getReportOutputDirectory());
+ if (!siteDir.exists() && !siteDir.mkdirs()) {
+ throw new IOException("Couldn't create report output
directory: " + siteDir);
+ }
+ FileUtils.copyFile(targetFile, new File(siteDir, "cpd.xml"));
+ }
+ }
+
+ private void writeFormattedReport(CPDReport cpd) throws IOException,
MavenReportException {
+ CPDReportRenderer r = CpdExecutor.createRenderer(request.getFormat(),
request.getOutputEncoding());
+ writeReport(cpd, r, request.getFormat());
+ }
+
+ private File writeReport(CPDReport cpd, CPDReportRenderer renderer, String
extension) throws IOException {
+ if (renderer == null) {
+ return null;
+ }
+
+ File targetDir = new File(request.getTargetDirectory());
+ if (!targetDir.exists() && !targetDir.mkdirs()) {
+ throw new IOException("Could create report output directory " +
targetDir);
Review Comment:
This is inconsistent with line 75
##########
src/main/java/org/apache/maven/plugins/pmd/exec/CpdReportConsumer.java:
##########
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.plugins.pmd.exec;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.util.function.Consumer;
+import java.util.function.Predicate;
+
+import net.sourceforge.pmd.cpd.CPDReport;
+import net.sourceforge.pmd.cpd.CPDReportRenderer;
+import net.sourceforge.pmd.cpd.Match;
+import net.sourceforge.pmd.cpd.XMLRenderer;
+import org.apache.maven.plugins.pmd.ExcludeDuplicationsFromFile;
+import org.apache.maven.reporting.MavenReportException;
+import org.codehaus.plexus.util.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+class CpdReportConsumer implements Consumer<CPDReport> {
+ private static final Logger LOG =
LoggerFactory.getLogger(CpdReportConsumer.class);
+
+ private final CpdRequest request;
+ private final ExcludeDuplicationsFromFile excludeDuplicationsFromFile;
+
+ CpdReportConsumer(CpdRequest request, ExcludeDuplicationsFromFile
excludeDuplicationsFromFile) {
+ this.request = request;
+ this.excludeDuplicationsFromFile = excludeDuplicationsFromFile;
+ }
+
+ @Override
+ public void accept(CPDReport report) {
+ try {
+ // always create XML format. we need to output it even if the file
list is empty or we have no
+ // duplications so that the "check" goals can check for violations
+ writeXmlReport(report);
+
+ // HTML format is handled by maven site report, XML format has
already been rendered.
+ // a renderer is only needed for other formats
+ String format = request.getFormat();
+ if (!"html".equals(format) && !"xml".equals(format)) {
+ writeFormattedReport(report);
+ }
+ } catch (IOException | MavenReportException e) {
+ // Exceptions happening during this consumer are logged by PMD
+ // through the CPDConfiguration's reporter.
+ throw new RuntimeException(e);
Review Comment:
Where is this runtime unwrapped? I don't see it.
> Build doesn't fail for invalid CPD format
> -----------------------------------------
>
> Key: MPMD-395
> URL: https://issues.apache.org/jira/browse/MPMD-395
> Project: Maven PMD Plugin
> Issue Type: Bug
> Components: CPD
> Affects Versions: 3.22.0
> Reporter: Andreas Dangel
> Assignee: Andreas Dangel
> Priority: Major
> Fix For: next-version
>
>
> See
> [https://github.com/apache/maven-pmd-plugin/pull/144#issuecomment-2094371392]
>
> If an exception occurs while the CPD report is created, the exception is only
> logged but doesn't fail the build. This means, that build appears to be
> successful, although it didn't produce all expected build artifacts.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)