编译失败,并且在JavaScanner.skipBlockComment

时间:2020-09-29 19:25:31

标签: java scala apache-spark compilation scala-maven-plugin

我尝试使用scala-maven-plugin 2.4.0编译Java / Scala混合项目。

以下是使用的父pom,即scala.version = 2.12,其依赖项为org.scala-lang:scala-library:2.12.10,如果检查其依赖项,则来自Spark-core 2.4.6。 它依赖于另一个pom,该pom只知道如何编译 Java 源。

<?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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <artifactId>parent-spark</artifactId>
    <packaging>pom</packaging>

    <name>POM Parent pour les projets Spark</name>
    <description>POM Parent pour les projets Spark</description>

    <parent>
        <groupId>fr.comptes.france</groupId>
        <artifactId>parent</artifactId>
        <version>0.0.6-SNAPSHOT</version>
        <relativePath>../Parent-POM</relativePath>
    </parent>

    <dependencies>
        <!-- DAO vers Postgis -->
        <dependency>
            <groupId>fr.comptes.france</groupId>
            <artifactId>dao.postgis</artifactId>
            <version>${project.parent.version}</version>
        </dependency>

        <!-- Spark core et sql --> 
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_${scala.version}</artifactId>
            <version>${spark.version}</version>
            <scope>provided</scope>

            <!-- Exclusion de ses loggers -->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>

                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>log4j-over-slf4j</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_${scala.version}</artifactId>
            <version>${spark.version}</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-mllib_${scala.version}</artifactId>
            <version>${spark.version}</version>
            <scope>provided</scope>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>4.4.0</version>
                
                <executions>
                    <execution>
                        <id>scala-compile-first</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                        
                        <configuration>
                            <recompileMode>all</recompileMode>
                            <sourceDir>src/main/scala</sourceDir>
                        </configuration>
                    </execution>
                    
                    <execution>
                        <id>scala-test-compile</id>
                        <phase>process-test-resources</phase>
                        <goals>
                            <goal>testCompile</goal>
                        </goals>
                        
                        <configuration>
                            <recompileMode>all</recompileMode>
                            <testSourceDir>${project.basedir}/src/test/scala</testSourceDir>
                        </configuration>
                    </execution>
                </executions>
                
                <configuration>
                    <scalaVersion>${scala.version}</scalaVersion>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

编译具有以下项目的项目时:
src/main/scala为空
src/main/java和三个 Java 源文件

以这种方式失败:

[INFO] Building Spark (Datasets) : Registre National des Associations (RNA) 0.0.6-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ spark-dataset-association ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] Copying 0 resource
[INFO] 
[INFO] --- scala-maven-plugin:4.4.0:compile (scala-compile-first) @ spark-dataset-association ---
[WARNING]  Expected all dependencies to require Scala version: 2.12.0
[WARNING]  org.apache.spark:spark-core_2.12:2.4.6 requires scala version: 2.12.10
[WARNING] Multiple versions of scala libraries detected!
[INFO] /home/marc/dev/Java/comptes-france/metier-et-gestion/dev/SparkDatasetAssociation/src/main/java:-1: info: compiling
[INFO] /home/marc/dev/Java/comptes-france/metier-et-gestion/dev/SparkDatasetAssociation/src/main/scala:-1: info: compiling
[INFO] Compiling 4 source files to /home/marc/dev/Java/comptes-france/metier-et-gestion/dev/SparkDatasetAssociation/target/classes at 1601406402143
[ERROR] error: java.lang.StackOverflowError
[INFO]  at scala.tools.nsc.javac.JavaScanners$JavaScanner.putCommentChar(JavaScanners.scala:580)
[INFO]  at scala.tools.nsc.javac.JavaScanners$JavaScanner.skipBlockComment(JavaScanners.scala:585)
[INFO]  at scala.tools.nsc.javac.JavaScanners$JavaScanner.skipBlockComment(JavaScanners.scala:585)
[INFO]  at scala.tools.nsc.javac.JavaScanners$JavaScanner.skipBlockComment(JavaScanners.scala:585)
[INFO]  at scala.tools.nsc.javac.JavaScanners$JavaScanner.skipBlockComment(JavaScanners.scala:585)
[INFO]  at scala.tools.nsc.javac.JavaScanners$JavaScanner.skipBlockComment(JavaScanners.scala:585)

八个项目中的三个项目遇到了麻烦。

  1. 为什么scala-maven-plugin会尝试编译src/main/java内容?
    我是否没有提到我要它编译src/main/scala Scala 源?

  2. 该错误可能是什么?
    在我的 Java 源文件中,我的javadoc或注释都可以:可用Javadoc正确性的所有 Eclipse 警告对其进行检查。

  3. 开始在 Scala / Java 混合项目中遇到这样的麻烦,使我感到 Scala 编译器无法为此工作做好准备。
    是否打算以这种方式使用?


对于其中一个项目,我找到了原因:
这个完全正确的评论:

/*
   Données infra-communales    -     Diplômes - Formation      
   Mise en ligne le 22/10/2019       Géographie au 01/01/2018     
         
   IRIS                    Code du département suivi du numéro de commune ou du numéro d'arrondissement municipal suivi du numéro d'IRIS
   REG                     Code de la région
   DEP                     Code du département
   UU2010                  Code du département ou "00" pour les unités urbaines qui s'étendent sur plusieurs départements voire au-delà de la frontière suivi d'un code sur une position indiquant la taille de la population puis d'un numéro d'ordre à l'intérieur de la taille
   COM                     Code du département suivi du numéro de commune ou du numéro d'arrondissement municipal pour Paris Lyon et Marseille
   LIBCOM                  Libellé de la commune ou de l'arrondissement municipal pour Paris Lyon et Marseille
   TRIRIS                  Code du département suivi d'un numéro d'ordre à l'intérieur du département sur trois positions puis d'un indicateur de TRIRIS
   GRD_QUART               Code du département suivi du numéro de commune ou du numéro d'arrondissement municipal pour Paris Lyon et Marseille suivi du numéro de grand quartier
   LIBIRIS                 Libellé de l'IRIS à l'intérieur de la commune ou de l'arrondissement municipal pour Paris Lyon et Marseille
   TYP_IRIS                Type d'IRIS : habitat (H), activité (A), divers (D), Autre (Z)
   MODIF_IRIS              Type de modification de l'IRIS
   LAB_IRIS                Label de qualité de l'IRIS
   P16_POP0205             Nombre de personnes de 2 à 5 ans
   P16_POP0610             Nombre de personnes de 6 à 10 ans
   P16_POP1114             Nombre de personnes de 11 à 14 ans
   P16_POP1517             Nombre de personnes de 15 à 17 ans
   P16_POP1824             Nombre de personnes de 18 à 24 ans
   P16_POP2529             Nombre de personnes de 25 à 29 ans
   P16_POP30P              Nombre de personnes de 30 ans ou plus
   P16_SCOL0205            Nombre de personnes scolarisées de 2 à 5 ans
   P16_SCOL0610            Nombre de personnes scolarisées de 6 à 10 ans
   P16_SCOL1114            Nombre de personnes scolarisées de 11 à 14 ans
   P16_SCOL1517            Nombre de personnes scolarisées de 15 à 17 ans
   P16_SCOL1824            Nombre de personnes scolarisées de 18 à 24 ans
   P16_SCOL2529            Nombre de personnes scolarisées de 25 à 29 ans
   P16_SCOL30P             Nombre de personnes scolarisées de 30 ans ou plus
   P16_NSCOL15P            Nombre de personnes non scolarisées de 15 ans ou plus
   P16_NSCOL15P_DIPLMIN    Nombre de personnes non scolarisées de 15 ans ou plus titulaires d'aucun diplôme ou au plus un BEPC, brevet des collèges ou DNB
   P16_NSCOL15P_CAPBEP     Nombre de personnes non scolarisées de 15 ans ou plus titulaires d'un CAP ou d'un BEP
   P16_NSCOL15P_BAC        Nombre de personnes non scolarisées de 15 ans ou plus titulaires d'un baccalauréat (général, technologique, professionnel)
   P16_NSCOL15P_SUP        Nombre de personnes non scolarisées de 15 ans ou plus titulaires d'un diplôme de l'enseignement supérieur
   P16_HNSCOL15P           Nombre d'hommes non scolarisés de 15 ans ou plus
   P16_HNSCOL15P_DIPLMIN   Nombre d'hommes non scolarisés de 15 ans ou plus titulaires d'aucun diplôme ou au plus un BEPC, brevet des collèges ou DNB
   P16_HNSCOL15P_CAPBEP    Nombre d'hommes non scolarisés de 15 ans ou plus titulaires d'un CAP ou d'un BEP
   P16_HNSCOL15P_BAC       Nombre d'hommes non scolarisés de 15 ans ou plus titulaires d'un baccalauréat (général, technologique, professionnel)
   P16_HNSCOL15P_SUP       Nombre d'hommes non scolarisés de 15 ans ou plus titulaires d'un diplôme de l'enseignement supérieur
   P16_FNSCOL15P           Nombre de femmes non scolarisées de 15 ans ou plus
   P16_FNSCOL15P_DIPLMIN   Nombre de femmes non scolarisées de 15 ans ou plus titulaires d'aucun diplôme ou au plus un BEPC, brevet des collèges ou DNB
   P16_FNSCOL15P_CAPBEP    Nombre de femmes non scolarisées de 15 ans ou plus titulaires d'un CAP ou d'un BEP
   P16_FNSCOL15P_BAC       Nombre de femmes non scolarisées de 15 ans ou plus titulaires d'un baccalauréat (général, technologique, professionnel)
   P16_FNSCOL15P_SUP       Nombre de femmes non scolarisées de 15 ans ou plus titulaires d'un diplôme de l'enseignement supérieur
 */

评论大小是否有限制,必须遵守 在 Scala 编译器想要查看的外部文件上,即使它们不关心它们?

是哪个? 3行,最多4行?

另一方面,(由于我不确定:我不想删除源文件中的注释以进行检查),这些注释由于数量过多而被拒绝了:

/**
 * Thème des objets sociaux. 
 * @author Marc Le Bihan
 */
public enum ThemeObjetSocial {
   /** Retour à l'emploi. */
   RETOUR_A_EMPLOI("Retour à l'emploi", new String[] {
      "019014", // Lutte contre l'illettrisme
      "019016", // Aide à l'insertion des jeunes
      "019020", // Groupements de chômeurs, aide aux chômeurs
      "019050", // Réinsertion des délinquants
      "019055", // Soutien, reclassement des détenus
      "030000", // Aide à l'emploi, développement local, promotion de solidarités économiques, vie locale
      "030010", // Entreprises d'insertion, associations intermédiaires, régies de quartier
      "030020", // Aide à la création d'activités économiques individuelles
      "030050", // Promotion d'initiatives de développement durable
   }),

   /** Professionnels. */
   PROFESSIONNELS_EMPLOI("Professionnels", new String[] {
      "014025", // Organisation de professions (hors caractère syndical)
      "030005", // Comité, défense d'un emploi
      "030015", // Groupement d'employeurs
   }),

   /** Formations */
   FORMATIONS("Formations", new String[] {
      "015000", // Éducation formation
      "015010", // Organisation de professions enseignantes, amicales de personnel
      "015025", // Associations périscolaires, coopération, aide à l'enseignement
      "015030", // Œuvres sociales en faveur des élèves, œuvres en faveur pupilles de la nation
      "015035", // Organisme de gestion d'établissement d'enseignement général et technique
      "015040", // Organisme de gestion d'établissement d'enseignement supérieur
      "015045", // Établissement de formation professionnelle, formation continue
      "015050", // Centre d'enseignement et de formation associations d’étudiants, d’élèves
      "015087", // Études et formations linguistiques
      "015100", // Apprentissage
   }),

   /** Aspects sociaux liés à l'emploi */
   SOCIAL_EMPLOI("Aspects sociaux liés à l'emploi", new String[] {
      "002005", // Associations philanthropiques
      "002010", // Amicales laïques
      "004010", // Médiation, prévention
      "014000", // Amicales, groupements affinitaires, groupements d'entraide (hors défense de droits fondamentaux)
      "014035", // Groupements d'entraide et de solidarité
      "018030", // Prévention et lutte contre l'alcoolisme, la toxicomanie
      "019000", // Interventions sociales
      "019004", // Aide et conseils aux familles
      "019005", // Associations familiales, services sociaux pour les familles
      "019012", // Lutte contre le surendettement
      "019040", // Aide aux personnes en danger, solitude, désespoir, soutien psychologique et moral
      "020000", // Associations caritatives, humanitaires, aide au développement, développement du bénévolat
      "020005", // Secours financiers et autres services aux personnes en difficulté
      "020010", // Secours en nature, distribution de nourriture et de vêtements
      "020015", // Associations caritatives à buts multiples
      "020020", // Associations caritatives intervenant au plan international
      "021005", // Crèches, garderies, haltes garderies
      "003060", // Activités civiques, information civique
      "030012", // Comités de défense et d'animation de quartier, association locale ou municipale
      "032000", // Logement
      "032510", // Aide au logement
      "032520", // Associations et comités de locataires, de propriétaires, comités de logement
   }),

   /** Soutien publics particules */
   SOUTIEN_PUBLICS_PARTICULIERS("Soutien publics particuliers", new String[] {
      "019025", // Aide aux réfugiés et aux immigrés (hors droits fondamentaux)
      "003020", // Défense des droits des femmes, condition féminine
      "003025", // Défense des droits des personnes homosexuelles
      "003030", // Défense des droits des personnes en situation de handicap
      "003035", // Association pour la défense de droits de minorités
      "003045", // Défense des droits des personnes rapatriées
      "003050", // Défense des droits des personnes étrangères ou immigrées, de personnes réfugiées
      "014050", // Associations féminines pour l'entraide et la solidarité (hors défense de droits fondamentaux)
      "014060", // Associations de personnes homosexuelles pour l'entraide et la solidarité (hors défense de droits fondamentaux)
      "014070", // Associations de personnes en situation de handicap pour l'entraide et la solidarité (hors défense de droits fondamentaux)
      "014080", // Associations de classe d'âge
      "003040", // Lutte contre les discriminations
      "018050", // Aide sociale aux personnes en situation de handicap
      "018015", // Établissements, services pour personnes handicapées (y compris c.a.t)
      "018025", // Établissements et services pour adultes en difficulté, chrs (centres d'hébergement et de réadaptation sociale)
      "018040", // Aide aux accidentés du travail
   }),
   
   /** Développement touristique. */
   DEVELOPPEMENT_TOURISTIQUE("Développement touristique", new String[] {
      "007000", // Clubs de loisirs, relations
      "007040", // Activités festives (soirées...)
      "007080", // Centres de loisirs, clubs de loisirs multiples
      "009010", // Loisirs pour personnes en situation de handicap
      "009020", // Centres aérés, colonies de vacances
      "009025", // Mouvements éducatifs de jeunesse et d'éducation populaire
      "011000", // Sports, activités de plein air
      "011005", // Associations multisports locales
      "011018", // Handisport
      "011125", // Natation - baignade (natation, plongée)
      "011192", // Associations pour la promotion du sport, médailles, mérite sportif
      "011400", // Activités de plein air (dont saut à l'élastique)
      "023045", // Représentation d'intérêts régionaux et locaux
      "024050", // Actions de sensibilisation et d'éducation à l'environnement et au développement durable
      "030012", // Comités de défense et d'animation de quartier, association locale ou municipale
      "030050", // Promotion d'initiatives de développement durable
      "034000", // Tourisme
      "034230", // Gîtes ruraux, camping, caravaning, naturisme
      "034240", // Syndicats d'initiative, offices de tourisme, salons du tourisme
      "036520", // Sauvetage, secourisme, protection civile
   });
   
   /** Liste des codes objets sociaux associés. */
   private String[] codesObjetsSociaux;
   
   /** Libellé de ce thème d'objet social. */
   private String libelle;

   /**
    * Construire un thème d'objet social.
    * @param libelle Libellé du thème.
    * @param codesObjetsSociaux Liste des codes objets sociaux liés.
    */
   private ThemeObjetSocial(String libelle, String[] codesObjetsSociaux) {
      this.libelle = libelle;
      this.codesObjetsSociaux = codesObjetsSociaux;
   }
   
   /**
    * Renvoyer le libellé du thème.
    * @return Libellé.
    */
   public String getLibelle() {
      return this.libelle;
   }
   
   /**
    * Renvoyer la liste des codes objets sociaux.
    * @return Codes objets Sociaux.
    */
   public String[] getCodesObjetsSociaux() {
      return this.codesObjetsSociaux;
   }
   
   /**
    * Renvoyer une liste combinée de plusieurs natures d'objets sociaux.
    * @param themesSociaux Liste des thèmes sociaux désirés.
    * @return Liste des codes sociaux correspondants.
    */
   public static List<String> union(ThemeObjetSocial... themesSociaux) {
      List<String> themes = new ArrayList<>();
      
      for(ThemeObjetSocial theme : themesSociaux) {
         for(String objetSocial : theme.getCodesObjetsSociaux()) {
            themes.add(objetSocial);
         }
      }
      
      return themes;
   }
}

当我开始编写 Scala 源文件时,我必须遵守的注释限制是什么?

据我了解,评论太多,因为 Scala 在超出限制后无法处理它们,
但是多少低?


我已经找到一种避免错误的解决方法:

<plugin>
    <groupId>net.alchim31.maven</groupId>
    <artifactId>scala-maven-plugin</artifactId>
    <version>4.4.0</version>
    
    <executions>
        <execution>
            <id>scala-compile-first</id>
            <phase>process-resources</phase>
            <goals>
                <goal>compile</goal>
            </goals>
            
            <configuration>
                <recompileMode>all</recompileMode>
                <sourceDir>src/main/scala</sourceDir>
            </configuration>
        </execution>
        
        <execution>
            <id>scala-test-compile</id>
            <phase>process-test-resources</phase>
            <goals>
                <goal>testCompile</goal>
            </goals>
            
            <configuration>
                <recompileMode>all</recompileMode>
                <testSourceDir>${project.basedir}/src/test/scala</testSourceDir>
            </configuration>
        </execution>
    </executions>
    
    <configuration>
         <!-- Go inside spark-core to find scala version used and copy it here -->
        <scalaVersion>2.12.10</scalaVersion>
<!-- instead of 2.12 that was here before -->
    </configuration>
</plugin>

(例如,如果您愿意指定使用Java 1.8.151而不是Java 1.8进行编译)。

0 个答案:

没有答案