Tengo un proyecto Scala que construyo en un tarro de grasa. Hoy me tenía que añadir algunas clases de Java para el proyecto, pero ahora mi construcción Maven está fallando.
La estructura de mi proyecto apariencia (más o menos) como esto:
.
├── src
│ └── main
│ ├── resources
│ │ └── Log4j.properties
| ├── java
│ │ └── com
│ │ └── myorg
│ │ └── myproject
│ │ └── MyPublicJavaClass.java
│ └── scala
│ └── com
│ └── myorg
│ └── myproject
│ └── spark
│ └── Main.scala
└── pom.xml
Y esto es lo que mi archivo POM se ve así:
<?xml version="1.0"?>
<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>
<name>myproject</name>
<url>http://maven.apache.org</url>
<groupId>com.myorg</groupId>
<artifactId>myproject</artifactId>
<packaging>jar</packaging>
<version>0.1.0-RELEASE</version>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<encoding>UTF-8</encoding>
<scala.tools.version>2.11</scala.tools.version>
<scala.version>2.11.8</scala.version>
<spark.version>2.4.0</spark.version>
<aws.sdk.version>1.11.553</aws.sdk.version>
</properties>
<build>
<sourceDirectory>src/main/scala</sourceDirectory>
<testSourceDirectory>src/test/scala</testSourceDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/test/resources</directory>
</testResource>
</testResources>
<plugins>
<!-- I added this plugin today to try and make it compile the Java code -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>generate-sources</phase>
<configuration>
<sources>
<source>src/main/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<!-- This compiles the Scala code -->
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<version>2.15.2</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- This builds the fat JAR -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.myorg.myproject.spark.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${scala.tools.version}</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_${scala.tools.version}</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-core</artifactId>
<version>${aws.sdk.version}</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-dynamodb</artifactId>
<version>${aws.sdk.version}</version>
</dependency>
<dependency>
<groupId>com.amazon.emr</groupId>
<artifactId>emr-dynamodb-hadoop</artifactId>
<version>4.8.0</version>
</dependency>
<dependency>
<groupId>com.github.scopt</groupId>
<artifactId>scopt_${scala.tools.version}</artifactId>
<version>3.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-scala</artifactId>
<version>11.0</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Antes de agregar la clase de Java, junto con el build-helper-maven-plugin
día de hoy, Maven fue capaz de construir este proyecto sin ningún problema. Pero ahora, parece que no he configurado correctamente ese plugin, o tal vez no lo estoy usando la correcta?
Mi código Scala está tratando de utilizar un objeto de tipo MyPublicJavaClass
por lo que ahora los errores de generación que veo en Maven tener este aspecto:
[ERROR] ~ / src / main / Scala / com / myorg / miproyecto / chispas / Main.scala: 227: Error: No se ha encontrado: MyPublicJavaClass tipo
...
[ERROR] Error al ejecutar el meta-herramientas org.scala: scala-maven-plugin: 2.15.2: compilación (por defecto) el proyecto myproject: envoltura: org.apache.commons.exec.ExecuteException: Proceso salió con un error: 1 (valor de salida: 1) -> [Ayuda 1]
Pensé que el build-helper-maven-plugin
diría que añadir el directorio principal del código Java a la lista de fuentes para generar antes de tiempo de compilación, pero al parecer no. ¿Cómo puedo arreglar esto?
Está utilizando un plugin muy antiguo para su compilación Scala (última versión 2.15.2
han sido liberados 6 Feb 2011 ).
Te sugiero primero en actualizar a un plugin más reciente, como la scala-maven-plugin
(última versión 4.0.2
el 11 de mayo 2019).
A continuación, puede encontrado un ejemplo con fuentes de Scala / Java mixtos en los documentos . No hay necesidad de utilizar build-helper-maven-plugin
, en este caso, ni a configurar sourceDirectory
y testSourceDirectory
. Marque esta sencilla pom.xml
con este plugin (solo he quitado las dependencias no utilizados del ejemplo que nos ha proporcionado cuando reproduje el problema a nivel local):
<?xml version="1.0"?>
<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>
<name>myproject</name>
<url>http://maven.apache.org</url>
<groupId>com.myorg</groupId>
<artifactId>myproject</artifactId>
<packaging>jar</packaging>
<version>0.1.0-RELEASE</version>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<encoding>UTF-8</encoding>
<scala.tools.version>2.11</scala.tools.version>
<scala.version>2.11.8</scala.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>4.0.2</version>
<executions>
<execution>
<id>scala-compile-first</id>
<phase>process-resources</phase>
<goals>
<goal>add-source</goal>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>scala-test-compile</id>
<phase>process-test-resources</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- This builds the fat JAR -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.myorg.myproject.spark.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>