java principale Che cosa significa Combineaccessrules nei percorsi di classe Eclipse?



errore: impossibile trovare o caricare la classe principale eclipse (3)

Questo mi ha infastidito per anni, e ho pensato che uno di voi sapesse bene - nei file .classpath di Eclipse, qual è l'attributo combineaccessrules dell'elemento classpathentry effettivamente usato?

Riesco a vedere nella finestra di dialogo di configurazione del percorso di costruzione Java che può essere manipolata, ma non riesco a pensare a un buon caso di utilizzo. Se oscuro le impostazioni o modifico manualmente il file .classpath, non sembra che abbia alcun effetto.

Spero che qualcun altro abbia fatto buon uso e io possa rubare le loro idee. Fondamentalmente, è un prurito che sto cercando di graffiare.


Answer #1

Le regole di accesso sono piccole cose a portata di mano, ma pericolose. Escludono un file sorgente dal compilatore del progetto ma lasciano il file intatto nel filesystem.

Il progetto su cui lavoro ha una classe bootstrap in una delle nostre cartelle di origine, ma se includiamo l'intera cartella, il classpath del progetto non verrà compilato (è una lunga storia e il processo di compilazione lo gestisce).

Quindi usiamo una regola di accesso di eclissi per escluderla e non ci disturba mai durante lo sviluppo. Ciò significa che non possiamo cambiare facilmente il codice, ma è una di quelle classi che non sono state letteralmente toccate da anni.

Combinare le regole di accesso, a giudicare dal JavaDoc, è un vero caso d'uso marginale. Per usarlo dovresti avere:

  • una regola di accesso in una voce di origine esportata di un progetto
  • un collegamento a quel progetto da un progetto genitore
  • una necessità di combinare le regole di accesso del sottoprogetto con il genitore

Non posso davvero dire come sarebbe utile, ma spero che almeno risponda alla tua domanda "che cos'è" :)


Answer #2

anche se non l'ho mai usato da solo, un po 'di spazio può essere trovato here .

se le regole di accesso delle voci esportate del progetto devono essere combinate con le regole di accesso di questa voce

le regole di accesso sarebbero qualcosa come includere "com / tests / **"


Answer #3

Con il corretto utilizzo delle regole di accesso è possibile prevenire l'uso di classi e metodi "interni" e / o "non-api". Quando si aggiunge una classe o un pacchetto come Vietato o Scoraggiato, il compilatore mostra un errore o un avviso quando si utilizza tale classe o classe dal pacchetto specificato. Per un'introduzione più lunga delle regole di accesso dovresti leggere questo breve articolo .

Per l'utilizzo delle regole di accesso alla combinazione, immagina la seguente situazione:

  • Hai 2 progetti, A e B.
  • Sul classpath del progetto A è presente un file jar esportato. Il jar contiene alcune classi pubbliche "api stabili", "api instabili" e "non-api".
  • Il progetto B dipende dal progetto A.

Non si consente l'utilizzo di classi "non-api" nel progetto A, quindi si impostano alcune regole di accesso vietate su tali classi / pacchetti.

Nel progetto B non si consente l'uso di "non-api", ma si desidera ricevere un avvertimento quando si utilizza "API instabile". In questo caso nel progetto B devi solo impostare le regole di accesso Scoraggiato se controlli le regole di combinazione con le regole di accesso delle voci di progetto esportate .





classpath