2017-09-11 1 views
1

Je souhaite utiliser les modules java 9 dans mon projet. Je veux mettre mes données et classes de service (dans le paquet com.test.base) dans un module nommé (Base), et mettre d'autres choses comme la classe principale et GUI (dans le paquet nommé com.test.main) dans un autre module nommé (principal).Comment déclarer des modules en java 9

  • Comment déclarer un module simple (Base)?
  • Comment déclarer le module (principal) avec la dépendance du module (de base)?
  • Je souhaite également utiliser le module (Base) avec réflexion.

  • Supposons que mon paquetage racine soit com.test alors quelle structure de répertoires dois-je utiliser pour ces modules?

+4

Avez-vous lu la documentation ** **? Si oui, quelle partie vous a troublé? Si non, pourquoi pas? StackOverflow n'est pas un site d'enseignement. – Andreas

Répondre

3

Le jigsaw quick-start est un bon endroit pour commencer avec cela pour vous aider. Pour répondre aux questions spécifiques:

Comment déclarer un module simple (Base)?

Créer une classe nommée au sein module-info.java répertoire com.test.base avec la définition:

module base { 
    exports com.test.base; 
} 

Cette exporte le paquet com.test.base.


Comment déclarer le module (Principal) avec la dépendance du module (base)?

Identique à l'autre module base une classe nommée module-info.java au sein de répertoire com.test.main avec la définition:

module main { 
    requires com.test.base; 
} 

utilise le package exporté.


Je veux aussi utiliser le module (base) avec la réflexion.

Selon l'utilisation yoru, si les os API supprimées ou des modifications énumérées here, vous pouvez utiliser l'option --add-exports java comme détaillé dans le JEP-261

Je voudrais aussi vous suggère de lire Nicolai's answer-How to solve InaccessibleObjectException ("Unable to make {member} accessible: module {A} does not 'opens {package}' to {B}") on Java 9? pour une belle explication sur la façon de faire usage de la réflexion dans Java-9.

le correctif correct est de lancer la machine virtuelle Java comme suit:

--add-opens has the following syntax: {A}/{package}={B} 
java --add-opens java.base/java.lang=ALL-UNNAMED 

Si le code réfléchissant est dans un module nommé, ALL-NOMMÉ peut être remplacé par son nom.


On suppose mon paquet racine est TestCom donc ce que la structure répertoire devrait -je utiliser pour ces modules?

Votre structure de répertoire doit être un peu comme:

src/main/java 
- com.test 
    - base 
    - module-info.java 
    - com/test/base/Main.java 
    - main 
    - module-info.java 
    - com/test/main/SimpleClass.java