¿Se requiere la versión Java de Maven Dependency?

Desarrollé y construí mi aplicación Java usando Maven. Necesito soportar Java 1.6, así que uso las siguientes propiedades:

<maven.compiler.target>1.6</maven.compiler.target>
<maven.compiler.source>1.6</maven.compiler.source>

Aún así, cuando ejecuto la aplicación, aparece el error "Versión principal mayor no admitida" y sospecho que uno de mis archivos jar de dependencia está compilado con una versión Java más nueva que la que necesito admitir.

Mis preguntas:

  1. ¿Es esto posible? Pensé que Maven se encargaría de este tipo de problemas de versión de dependencia.

  2. ¿Hay una manera fácil de descubrir la versión menor / mayor de todas mis dependencias? (Sería increíble si se pudiera mostrar al hacer, mvn dependency:treepor ejemplo).

Respuesta 1

El problema es que cada dependencia (mantenedor) puede decidir por sí misma qué versión de Java se utiliza para compilar (1.5, 1.6, 1.7, 1.8, etc.), por lo que esto no se puede resolver a través de Maven. Pero puede asegurarse de no utilizar dependencias que utilicen una versión de Java diferente de la que desea tener.

Esto puede enfocarse usando Maven Enforcer Plugin usando extra-enforcer-rules :

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>1.4.1</version> <!-- find the latest version at http://maven.apache.org/plugins/maven-enforcer-plugin/ -->
        <executions>
          <execution>
            <id>enforce-bytecode-version</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <enforceBytecodeVersion>
                  <maxJdkVersion>1.6</maxJdkVersion>
                  <excludes>
                    <exclude>org.mindrot:jbcrypt</exclude>
                  </excludes>
                </enforceBytecodeVersion>
              </rules>
              <fail>true</fail>
            </configuration>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>extra-enforcer-rules</artifactId>
            <version>1.0-beta-5</version>
          </dependency>
        </dependencies>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

Esto interrumpirá su compilación si tiene una dependencia que se compila con una versión diferente de JDK de la que desea tener.

Respuesta: 2

TreeSet elimina diferentes elementos con el mismo valor de Comprator. No quiero que se elimine. ¿Hay alguna forma de controlar esto? ¿O usar otra clase de contenedor? Agregado: OK. Parece que no puedo usar Set. YO ...

¿Cómo se convierte una cadena RTF en texto sin formato en Java? La respuesta obvia es usar el RTFEditorKit de Swing, y esa parece ser la respuesta común en Internet. Sin embargo, el método de escritura que ...

Estoy tratando de agregar una matriz entera en Set de la siguiente manera, int [] arr = {2, 6, 4, 2, 3, 3, 1, 7}; Set <Integer> set = new HashSet <Integer> (Arrays.asList (arr)); Estoy recibiendo un error ...

Acabo de comenzar a usar el selenio webdriver para crear pruebas para sitios web que completan formularios haciendo clic en botones, etc. ¿Para qué más se puede usar Selenium? ¿Es este el propósito principal para ...