I attempt to compile a mixed Java / Scala project with scala-maven-plugin 2.4.0.

The parent pom used is the one following, scala.version = 2.12, with dependency org.scala-lang:scala-library:2.12.10, coming from Spark-core 2.4.6 if you check its dependencies. It relies on another pom who knows only how to compile Java sources.

<?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>

When compiling a project having :
src/main/scala empty
src/main/java with three Java sources files

It fails this way :

[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)

Three projects among eight suffer this trouble.

  1. Why does scala-maven-plugin attempt to compile src/main/java content ?
    Haven't I mentioned that I was asking it to compile Scala sources from src/main/scala ?

  2. What this error can be ?
    My javadoc or comments are ok in my Java sources file : they are checked by all the Eclipse warnings available for Javadoc correctness.

  3. Beginning a Scala / Java mixed project with such trouble makes me feel that Scala compiler could not be ready for such work.
    Is it intended to be used this way ?


For one of the projects, I found a cause :
This perfectly correct comment :

/*
   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
 */

Is there a limitation on comment size that has to be respected on foreign files that Scala compiler wants to see even if it is not concerned by them ?

Which is it ? 3 lines, 4 lines maximum ?

For another, it seems (by I'm unsure : I don't want to remove the comments on my source file to check) that these comments who are refused because they are too numerous :

/**
 * 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;
   }
}

When I will start to write Scala sources files, what are the comment limitations that I will have to respect ?

Not too much comments, I understand, because Scala cannot handle them after a limit,
but how many low ?


I've found a workaround to avoid the errors :

<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>

(Like if you were willing to specify that you are compiling in Java 1.8.151 and not in Java 1.8).

0

There are 0 answers